diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 23cf48a63b..6d407195a8 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -29,7 +29,7 @@ BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 241381) BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 17677) BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 28623) BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56078) -BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 110657) +BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 136256) BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28761) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55115) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 243517) @@ -122,10 +122,10 @@ CommitStore_verify:test_Paused_Revert() (gas: 18496) CommitStore_verify:test_TooManyLeaves_Revert() (gas: 36785) DefensiveExampleTest:test_HappyPath_Success() (gas: 200018) DefensiveExampleTest:test_Recovery() (gas: 424253) -E2E:test_E2E_3MessagesSuccess_gas() (gas: 1110291) +E2E:test_E2E_3MessagesSuccess_gas() (gas: 1134031) EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 38185) -EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 108335) -EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_revert_Revert() (gas: 116870) +EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 109684) +EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_revert_Revert() (gas: 82608) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 468131) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99235) EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12399) @@ -139,14 +139,14 @@ EVM2EVMMultiOffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 2 EVM2EVMMultiOffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 157010) EVM2EVMMultiOffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187408) EVM2EVMMultiOffRamp_batchExecute:test_SingleReport_Success() (gas: 145607) -EVM2EVMMultiOffRamp_batchExecute:test_Unhealthy_Revert() (gas: 521737) +EVM2EVMMultiOffRamp_batchExecute:test_Unhealthy_Revert() (gas: 538299) EVM2EVMMultiOffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10437) EVM2EVMMultiOffRamp_ccipReceive:test_Reverts() (gas: 15662) EVM2EVMMultiOffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67352) EVM2EVMMultiOffRamp_commit:test_InvalidInterval_Revert() (gas: 59642) EVM2EVMMultiOffRamp_commit:test_InvalidRootRevert() (gas: 58722) -EVM2EVMMultiOffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6404489) -EVM2EVMMultiOffRamp_commit:test_NoConfig_Revert() (gas: 5987629) +EVM2EVMMultiOffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6406089) +EVM2EVMMultiOffRamp_commit:test_NoConfig_Revert() (gas: 5989229) EVM2EVMMultiOffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 106187) EVM2EVMMultiOffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 116097) EVM2EVMMultiOffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 106208) @@ -159,9 +159,9 @@ EVM2EVMMultiOffRamp_commit:test_StaleReportWithRoot_Success() (gas: 225639) EVM2EVMMultiOffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117474) EVM2EVMMultiOffRamp_commit:test_Unhealthy_Revert() (gas: 77538) EVM2EVMMultiOffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 204931) -EVM2EVMMultiOffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6398812) +EVM2EVMMultiOffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6400412) EVM2EVMMultiOffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47718) -EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 5991681) +EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 5993281) EVM2EVMMultiOffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136870) EVM2EVMMultiOffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103588) EVM2EVMMultiOffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101459) @@ -172,26 +172,26 @@ EVM2EVMMultiOffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17302) EVM2EVMMultiOffRamp_execute:test_LargeBatch_Success() (gas: 1558948) EVM2EVMMultiOffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 339903) EVM2EVMMultiOffRamp_execute:test_MultipleReports_Success() (gas: 258341) -EVM2EVMMultiOffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6455106) -EVM2EVMMultiOffRamp_execute:test_NoConfig_Revert() (gas: 6037987) +EVM2EVMMultiOffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6456706) +EVM2EVMMultiOffRamp_execute:test_NoConfig_Revert() (gas: 6039587) EVM2EVMMultiOffRamp_execute:test_NonArray_Revert() (gas: 27703) EVM2EVMMultiOffRamp_execute:test_SingleReport_Success() (gas: 163239) EVM2EVMMultiOffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147217) -EVM2EVMMultiOffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6817158) +EVM2EVMMultiOffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6818758) EVM2EVMMultiOffRamp_execute:test_ZeroReports_Revert() (gas: 17154) EVM2EVMMultiOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18413) -EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 249352) +EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 258732) EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20672) -EVM2EVMMultiOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 201744) +EVM2EVMMultiOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 203093) EVM2EVMMultiOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48956) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48477) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 229787) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 86425) -EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 280248) +EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 289629) EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 92678) EVM2EVMMultiOffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35117) EVM2EVMMultiOffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 23918) -EVM2EVMMultiOffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 451435) +EVM2EVMMultiOffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 460816) EVM2EVMMultiOffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 54437) EVM2EVMMultiOffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 35906) EVM2EVMMultiOffRamp_executeSingleReport:test_MismatchingOnRampRoot_Revert() (gas: 154347) @@ -205,15 +205,15 @@ EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Succ EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 191751) EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 259610) EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 127621) -EVM2EVMMultiOffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 391759) +EVM2EVMMultiOffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 401140) EVM2EVMMultiOffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 65861) EVM2EVMMultiOffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 80895) -EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 535602) -EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 480560) +EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 552164) +EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 497122) EVM2EVMMultiOffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 35774) -EVM2EVMMultiOffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 520573) -EVM2EVMMultiOffRamp_executeSingleReport:test_Unhealthy_Revert() (gas: 517941) -EVM2EVMMultiOffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 488065) +EVM2EVMMultiOffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 537135) +EVM2EVMMultiOffRamp_executeSingleReport:test_Unhealthy_Revert() (gas: 534830) +EVM2EVMMultiOffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 504627) EVM2EVMMultiOffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 126045) EVM2EVMMultiOffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 155268) EVM2EVMMultiOffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3655340) @@ -226,28 +226,28 @@ EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 26004) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 152867) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 505596) -EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2285365) +EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2286715) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 207749) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 208326) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 659124) EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 299687) -EVM2EVMMultiOffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 160626) +EVM2EVMMultiOffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 161976) EVM2EVMMultiOffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 24145) EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 59111) EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 40433) EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 76136) -EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 178957) -EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 278828) +EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 188337) +EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 305691) EVM2EVMMultiOffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11379) EVM2EVMMultiOffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215350) EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14162) EVM2EVMMultiOffRamp_setDynamicConfig:test_PriceRegistryZeroAddress_Revert() (gas: 11660) EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 49203) EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 27169) -EVM2EVMMultiOffRamp_trialExecute:test_RateLimitError_Success() (gas: 238126) -EVM2EVMMultiOffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 246723) -EVM2EVMMultiOffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 301741) -EVM2EVMMultiOffRamp_trialExecute:test_trialExecute_Success() (gas: 282687) +EVM2EVMMultiOffRamp_trialExecute:test_RateLimitError_Success() (gas: 239475) +EVM2EVMMultiOffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 248072) +EVM2EVMMultiOffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 311122) +EVM2EVMMultiOffRamp_trialExecute:test_trialExecute_Success() (gas: 292068) EVM2EVMMultiOffRamp_verify:test_Blessed_Success() (gas: 176548) EVM2EVMMultiOffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178616) EVM2EVMMultiOffRamp_verify:test_NotBlessed_Success() (gas: 141477) @@ -277,7 +277,7 @@ EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Succ EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 205670) EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 121815) EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 143193) -EVM2EVMMultiOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3824556) +EVM2EVMMultiOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3859258) EVM2EVMMultiOnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 108546) EVM2EVMMultiOnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 73975) EVM2EVMMultiOnRamp_forwardFromRouter:test_forwardFromRouter_WithValidation_Success() (gas: 262685) @@ -294,30 +294,30 @@ EVM2EVMMultiOnRamp_setDynamicConfig:test_SetConfigOnlyOwner_Revert() (gas: 15939 EVM2EVMMultiOnRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 51996) EVM2EVMMultiOnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97214) EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_NotACompatiblePool_Revert() (gas: 38281) -EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 106252) -EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_revert_Revert() (gas: 114736) -EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 392159) -EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 145614) -EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 789382) -EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 176510) +EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 107601) +EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_revert_Revert() (gas: 80501) +EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 410921) +EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 146964) +EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 796129) +EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 177860) EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_NotACompatiblePool_Reverts() (gas: 29914) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 61712) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 44959) -EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 214456) -EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 307176) +EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 223836) +EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 333749) EVM2EVMOffRamp__report:test_Report_Success() (gas: 127410) -EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 255279) -EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 263870) -EVM2EVMOffRamp__trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 336203) -EVM2EVMOffRamp__trialExecute:test_trialExecute_Success() (gas: 314960) +EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 256629) +EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 265220) +EVM2EVMOffRamp__trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 345584) +EVM2EVMOffRamp__trialExecute:test_trialExecute_Success() (gas: 324341) EVM2EVMOffRamp_ccipReceive:test_Reverts() (gas: 17009) EVM2EVMOffRamp_constructor:test_CommitStoreAlreadyInUse_Revert() (gas: 153130) -EVM2EVMOffRamp_constructor:test_Constructor_Success() (gas: 5257993) +EVM2EVMOffRamp_constructor:test_Constructor_Success() (gas: 5259602) EVM2EVMOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 143864) EVM2EVMOffRamp_execute:test_EmptyReport_Revert() (gas: 21323) EVM2EVMOffRamp_execute:test_InvalidMessageId_Revert() (gas: 36486) EVM2EVMOffRamp_execute:test_InvalidSourceChain_Revert() (gas: 51652) -EVM2EVMOffRamp_execute:test_InvalidSourcePoolAddress_Success() (gas: 472927) +EVM2EVMOffRamp_execute:test_InvalidSourcePoolAddress_Success() (gas: 482308) EVM2EVMOffRamp_execute:test_ManualExecutionNotYetEnabled_Revert() (gas: 46374) EVM2EVMOffRamp_execute:test_MessageTooLarge_Revert() (gas: 152404) EVM2EVMOffRamp_execute:test_Paused_Revert() (gas: 102702) @@ -328,25 +328,25 @@ EVM2EVMOffRamp_execute:test_SingleMessageNoTokensUnordered_Success() (gas: 15926 EVM2EVMOffRamp_execute:test_SingleMessageNoTokens_Success() (gas: 174480) EVM2EVMOffRamp_execute:test_SingleMessageToNonCCIPReceiver_Success() (gas: 248585) EVM2EVMOffRamp_execute:test_SingleMessagesNoTokensSuccess_gas() (gas: 114991) -EVM2EVMOffRamp_execute:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 410714) +EVM2EVMOffRamp_execute:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 420095) EVM2EVMOffRamp_execute:test_SkippedIncorrectNonce_Success() (gas: 54147) EVM2EVMOffRamp_execute:test_StrictUntouchedToSuccess_Success() (gas: 132007) EVM2EVMOffRamp_execute:test_TokenDataMismatch_Revert() (gas: 52129) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 561592) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 500168) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 578154) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 516730) EVM2EVMOffRamp_execute:test_UnexpectedTokenData_Revert() (gas: 35486) -EVM2EVMOffRamp_execute:test_Unhealthy_Revert() (gas: 549169) +EVM2EVMOffRamp_execute:test_Unhealthy_Revert() (gas: 565731) EVM2EVMOffRamp_execute:test_UnsupportedNumberOfTokens_Revert() (gas: 63974) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 123206) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 143416) EVM2EVMOffRamp_execute:test_execute_RouterYULCall_Success() (gas: 428184) EVM2EVMOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 20582) -EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 282255) +EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 291635) EVM2EVMOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20209) -EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 219644) +EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 220994) EVM2EVMOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48632) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48098) -EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 317243) +EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 326624) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_ZeroGasZeroData_Success() (gas: 72423) EVM2EVMOffRamp_execute_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 231228) EVM2EVMOffRamp_execute_upgrade:test_V2NonceStartsAtV1Nonce_Success() (gas: 279720) @@ -363,7 +363,7 @@ EVM2EVMOffRamp_manuallyExecute:test_ManualExecGasLimitMismatch_Revert() (gas: 43 EVM2EVMOffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 25997) EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithGasOverride_Success() (gas: 188342) EVM2EVMOffRamp_manuallyExecute:test_ManualExec_Success() (gas: 187789) -EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2027924) +EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2029273) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 143654) EVM2EVMOffRamp_metadataHash:test_MetadataHash_Success() (gas: 8838) EVM2EVMOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 40131) @@ -396,7 +396,7 @@ EVM2EVMOnRamp_forwardFromRouter:test_PriceNotFoundForToken_Revert() (gas: 59347) EVM2EVMOnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 179148) EVM2EVMOnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 177430) EVM2EVMOnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 137322) -EVM2EVMOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3774775) +EVM2EVMOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3809477) EVM2EVMOnRamp_forwardFromRouter:test_TooManyTokens_Revert() (gas: 30187) EVM2EVMOnRamp_forwardFromRouter:test_Unhealthy_Revert() (gas: 43300) EVM2EVMOnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 109283) @@ -488,21 +488,21 @@ EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenT EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26292) LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Revert() (gas: 10992) LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Success() (gas: 18058) -LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3355878) -LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3352276) +LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3390790) +LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3387189) LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_Unauthorized_Revert() (gas: 11380) LockReleaseTokenPoolPoolAndProxy_supportsInterface:test_SupportsInterface_Success() (gas: 9977) LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60043) LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11355) -LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3121619) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3145874) LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 29942) LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 79844) LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59464) -LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3118061) +LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3142317) LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 11380) LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 72644) LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56196) -LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 238656) +LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 237556) LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 10992) LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18058) LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 9977) @@ -598,7 +598,7 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61409) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39890) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32973) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 393335) -MultiRampsE2E:test_E2E_3MessagesSuccess_gas() (gas: 1389396) +MultiRampsE2E:test_E2E_3MessagesSuccess_gas() (gas: 1413114) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37907) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23694) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38763) @@ -886,10 +886,10 @@ TokenAdminRegistry_setPool:test_setPool_Success() (gas: 35943) TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30617) TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18043) TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49390) -TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 6076728) -TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 6324538) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6924810) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7108901) +TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 6139245) +TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 6406966) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6984900) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7168991) TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 2209837) TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12089) TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23324) @@ -931,11 +931,11 @@ TokenProxy_getFee:test_GetFee_Success() (gas: 86702) USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 25290) USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35322) USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30073) -USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 132756) -USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 477205) -USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 289263) +USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 132731) +USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 477183) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 288285) USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 50676) -USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 118987) +USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 118967) USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66150) -USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11339) +USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11333) USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 9876) \ No newline at end of file diff --git a/contracts/gas-snapshots/liquiditymanager.gas-snapshot b/contracts/gas-snapshots/liquiditymanager.gas-snapshot index efb5b68fe3..c34f0f38a5 100644 --- a/contracts/gas-snapshots/liquiditymanager.gas-snapshot +++ b/contracts/gas-snapshots/liquiditymanager.gas-snapshot @@ -3,9 +3,9 @@ LiquidityManager_addLiquidity:test_addLiquiditySuccess() (gas: 279154) LiquidityManager_rebalanceLiquidity:test_InsufficientLiquidityReverts() (gas: 206745) LiquidityManager_rebalanceLiquidity:test_InvalidRemoteChainReverts() (gas: 192319) LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess() (gas: 9141768) -LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess_AlreadyFinalized() (gas: 8957594) -LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_MultiStageFinalization() (gas: 8952800) -LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_NativeRewrap() (gas: 8880598) +LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess_AlreadyFinalized() (gas: 8981838) +LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_MultiStageFinalization() (gas: 8977044) +LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_NativeRewrap() (gas: 8904842) LiquidityManager_rebalanceLiquidity:test_rebalanceLiquiditySuccess() (gas: 382897) LiquidityManager_receive:test_receive_success() (gas: 21182) LiquidityManager_removeLiquidity:test_InsufficientLiquidityReverts() (gas: 184869) @@ -19,7 +19,7 @@ LiquidityManager_setFinanceRole:test_OnlyOwnerReverts() (gas: 10987) LiquidityManager_setFinanceRole:test_setFinanceRoleSuccess() (gas: 21836) LiquidityManager_setLocalLiquidityContainer:test_OnlyOwnerReverts() (gas: 11052) LiquidityManager_setLocalLiquidityContainer:test_ReverstWhen_CalledWithTheZeroAddress() (gas: 10643) -LiquidityManager_setLocalLiquidityContainer:test_setLocalLiquidityContainerSuccess() (gas: 3495598) +LiquidityManager_setLocalLiquidityContainer:test_setLocalLiquidityContainerSuccess() (gas: 3519863) LiquidityManager_setMinimumLiquidity:test_OnlyOwnerReverts() (gas: 10925) LiquidityManager_setMinimumLiquidity:test_setMinimumLiquiditySuccess() (gas: 36389) LiquidityManager_withdrawERC20:test_withdrawERC20Reverts() (gas: 180359) diff --git a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol b/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol index 554533e39b..cf2b836a56 100644 --- a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol @@ -860,7 +860,7 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base { // transfer them to the final receiver. We use the _callWithExactGasSafeReturnData function because // the token contracts are not considered trusted. (success, returnData,) = CallWithExactGas._callWithExactGasSafeReturnData( - abi.encodeCall(IERC20.transfer, (receiver, localAmount)), + abi.encodeCall(IERC20.transferFrom, (localPoolAddress, receiver, localAmount)), localToken, s_dynamicConfig.maxTokenTransferGas, Internal.GAS_FOR_CALL_EXACT_CHECK, diff --git a/contracts/src/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol b/contracts/src/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol index abf60981de..56599a159b 100644 --- a/contracts/src/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/EVM2EVMOffRamp.sol @@ -649,7 +649,7 @@ contract EVM2EVMOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndVersio // transfer them to the final receiver. We use the _callWithExactGasSafeReturnData function because // the token contracts are not considered trusted. (success, returnData,) = CallWithExactGas._callWithExactGasSafeReturnData( - abi.encodeCall(IERC20.transfer, (receiver, localAmount)), + abi.encodeCall(IERC20.transferFrom, (localPoolAddress, receiver, localAmount)), localToken, sourceTokenData.destGasAmount - gasUsedReleaseOrMint, Internal.GAS_FOR_CALL_EXACT_CHECK, diff --git a/contracts/src/v0.8/ccip/pools/BurnMintTokenPoolAbstract.sol b/contracts/src/v0.8/ccip/pools/BurnMintTokenPoolAbstract.sol index 2085c9427b..1968b3c03d 100644 --- a/contracts/src/v0.8/ccip/pools/BurnMintTokenPoolAbstract.sol +++ b/contracts/src/v0.8/ccip/pools/BurnMintTokenPoolAbstract.sol @@ -40,7 +40,8 @@ abstract contract BurnMintTokenPoolAbstract is TokenPool { _validateReleaseOrMint(releaseOrMintIn); // Mint to the offRamp, which forwards it to the recipient - IBurnMintERC20(address(i_token)).mint(msg.sender, releaseOrMintIn.amount); + IBurnMintERC20(address(i_token)).mint(address(this), releaseOrMintIn.amount); + IBurnMintERC20(address(i_token)).approve(msg.sender, releaseOrMintIn.amount); emit Minted(msg.sender, releaseOrMintIn.receiver, releaseOrMintIn.amount); diff --git a/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol b/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol index 125a3a28ee..969f0ac1f7 100644 --- a/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol +++ b/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol @@ -75,7 +75,8 @@ abstract contract LegacyPoolWrapper is TokenPool { /// @dev Since extraData has never been used in LockRelease or MintBurn token pools, we can safely ignore it. function _releaseOrMintLegacy(Pool.ReleaseOrMintInV1 memory releaseOrMintIn) internal { s_previousPool.releaseOrMint( - releaseOrMintIn.originalSender, msg.sender, releaseOrMintIn.amount, releaseOrMintIn.remoteChainSelector, "" + releaseOrMintIn.originalSender, address(this), releaseOrMintIn.amount, releaseOrMintIn.remoteChainSelector, "" ); + i_token.approve(msg.sender, releaseOrMintIn.amount); } } diff --git a/contracts/src/v0.8/ccip/pools/LockReleaseTokenPool.sol b/contracts/src/v0.8/ccip/pools/LockReleaseTokenPool.sol index db168f994d..be3a599a97 100644 --- a/contracts/src/v0.8/ccip/pools/LockReleaseTokenPool.sol +++ b/contracts/src/v0.8/ccip/pools/LockReleaseTokenPool.sol @@ -68,7 +68,7 @@ contract LockReleaseTokenPool is TokenPool, ILiquidityContainer, ITypeAndVersion _validateReleaseOrMint(releaseOrMintIn); // Release to the offRamp, which forwards it to the recipient - getToken().safeTransfer(msg.sender, releaseOrMintIn.amount); + getToken().approve(msg.sender, releaseOrMintIn.amount); emit Released(msg.sender, releaseOrMintIn.receiver, releaseOrMintIn.amount); diff --git a/contracts/src/v0.8/ccip/pools/USDC/USDCTokenPool.sol b/contracts/src/v0.8/ccip/pools/USDC/USDCTokenPool.sol index adaf946b1e..d46fcbacd6 100644 --- a/contracts/src/v0.8/ccip/pools/USDC/USDCTokenPool.sol +++ b/contracts/src/v0.8/ccip/pools/USDC/USDCTokenPool.sol @@ -141,6 +141,7 @@ contract USDCTokenPool is TokenPool, ITypeAndVersion { /// specific message that was sent on source. function releaseOrMint(Pool.ReleaseOrMintInV1 calldata releaseOrMintIn) external + virtual override returns (Pool.ReleaseOrMintOutV1 memory) { @@ -155,8 +156,8 @@ contract USDCTokenPool is TokenPool, ITypeAndVersion { if (!i_messageTransmitter.receiveMessage(msgAndAttestation.message, msgAndAttestation.attestation)) { revert UnlockingUSDCFailed(); } - // Since the tokens are minted to the pool, the pool has to send it to the offRamp - getToken().safeTransfer(msg.sender, releaseOrMintIn.amount); + // Since the tokens are minted to the pool, the pool has to approve it for the offRamp + getToken().approve(msg.sender, releaseOrMintIn.amount); emit Minted(msg.sender, releaseOrMintIn.receiver, releaseOrMintIn.amount); return Pool.ReleaseOrMintOutV1({destinationAmount: releaseOrMintIn.amount}); diff --git a/contracts/src/v0.8/ccip/test/BaseTest.t.sol b/contracts/src/v0.8/ccip/test/BaseTest.t.sol index 498b1c5731..887ffbf616 100644 --- a/contracts/src/v0.8/ccip/test/BaseTest.t.sol +++ b/contracts/src/v0.8/ccip/test/BaseTest.t.sol @@ -38,7 +38,7 @@ contract BaseTest is Test { uint16 internal constant DEST_GAS_PER_PAYLOAD_BYTE = 16; uint16 internal constant DEFAULT_TOKEN_FEE_USD_CENTS = 50; - uint32 internal constant DEFAULT_TOKEN_DEST_GAS_OVERHEAD = 110_000; + uint32 internal constant DEFAULT_TOKEN_DEST_GAS_OVERHEAD = 144_000; uint32 internal constant DEFAULT_TOKEN_BYTES_OVERHEAD = 32; bool private s_baseTestInitialized; diff --git a/contracts/src/v0.8/ccip/test/helpers/MaybeRevertingBurnMintTokenPool.sol b/contracts/src/v0.8/ccip/test/helpers/MaybeRevertingBurnMintTokenPool.sol index e572f798ad..a30c4779dd 100644 --- a/contracts/src/v0.8/ccip/test/helpers/MaybeRevertingBurnMintTokenPool.sol +++ b/contracts/src/v0.8/ccip/test/helpers/MaybeRevertingBurnMintTokenPool.sol @@ -63,7 +63,9 @@ contract MaybeRevertingBurnMintTokenPool is BurnMintTokenPool { revert(add(32, revertReason), mload(revertReason)) } } - IBurnMintERC20(address(i_token)).mint(msg.sender, releaseOrMintIn.amount); + IBurnMintERC20(address(i_token)).mint(address(this), releaseOrMintIn.amount); + IBurnMintERC20(address(i_token)).approve(msg.sender, releaseOrMintIn.amount); + emit Minted(msg.sender, releaseOrMintIn.receiver, releaseOrMintIn.amount); return Pool.ReleaseOrMintOutV1({destinationAmount: releaseOrMintIn.amount}); } diff --git a/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol b/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol index 927c7e1f03..a7e6083825 100644 --- a/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol +++ b/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol @@ -478,7 +478,10 @@ contract TokenPoolAndProxy is EVM2EVMOnRampSetup { vm.startPrank(address(s_fakeOffRamp)); vm.expectEmit(address(s_legacyPool)); - emit Minted(address(s_pool), s_fakeOffRamp, amount); + emit Minted(address(s_pool), address(s_pool), amount); + + vm.expectEmit(address(s_token)); + emit IERC20.Approval(address(s_pool), address(s_fakeOffRamp), amount); s_pool.releaseOrMint( Pool.ReleaseOrMintInV1({ diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol index 5280c56ceb..603705e00a 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol @@ -2396,7 +2396,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet bytes memory revertData = "call reverted :o"; - vm.mockCallRevert(destToken, abi.encodeWithSelector(IERC20.transfer.selector, receiver, amount), revertData); + vm.mockCallRevert(destToken, abi.encodeWithSelector(IERC20.approve.selector, s_offRamp, amount), revertData); vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, revertData)); s_offRamp.releaseOrMintSingleToken( @@ -2449,7 +2449,6 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup { function test_releaseOrMintTokens_destDenominatedDecimals_Success() public { Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts(); - address destToken = s_destFeeToken; uint256 amount = 100; uint256 destinationDenominationMultiplier = 1000; srcTokenAmounts[0].amount = amount; @@ -2458,24 +2457,29 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup { Internal.RampTokenAmount[] memory sourceTokenAmounts = _getDefaultSourceTokenData(srcTokenAmounts); - // Since the pool call is mocked, we manually release funds to the offRamp - deal(destToken, address(s_offRamp), amount * destinationDenominationMultiplier); + address pool = s_destPoolBySourceToken[srcTokenAmounts[0].token]; + address destToken = s_destTokenBySourceToken[srcTokenAmounts[0].token]; + + // Since the pool call is mocked, we manually approve funds to the offRamp + deal(destToken, pool, amount * destinationDenominationMultiplier); + vm.startPrank(pool); + IERC20(destToken).approve(address(s_offRamp), amount * destinationDenominationMultiplier); + vm.startPrank(OWNER); + + Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ + originalSender: abi.encode(OWNER), + receiver: OWNER, + amount: amount, + localToken: destToken, + remoteChainSelector: SOURCE_CHAIN_SELECTOR, + sourcePoolAddress: sourceTokenAmounts[0].sourcePoolAddress, + sourcePoolData: sourceTokenAmounts[0].extraData, + offchainTokenData: offchainTokenData[0] + }); vm.mockCall( s_destPoolBySourceToken[srcTokenAmounts[0].token], - abi.encodeWithSelector( - LockReleaseTokenPool.releaseOrMint.selector, - Pool.ReleaseOrMintInV1({ - originalSender: abi.encode(OWNER), - receiver: OWNER, - amount: amount, - localToken: s_destTokenBySourceToken[srcTokenAmounts[0].token], - remoteChainSelector: SOURCE_CHAIN_SELECTOR_1, - sourcePoolAddress: sourceTokenAmounts[0].sourcePoolAddress, - sourcePoolData: sourceTokenAmounts[0].extraData, - offchainTokenData: offchainTokenData[0] - }) - ), + abi.encodeWithSelector(LockReleaseTokenPool.releaseOrMint.selector, releaseOrMintIn), abi.encode(amount * destinationDenominationMultiplier) ); diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol index 89f0f95fd4..16358f75ba 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol @@ -235,13 +235,17 @@ contract EVM2EVMOffRamp_execute is EVM2EVMOffRampSetup { amounts[1] = uint256(tokenAmount); Internal.EVM2EVMMessage memory message = _generateAny2EVMMessageWithTokens(1, amounts); - // console.log(message.length); message.data = messageData; IERC20 dstToken0 = IERC20(s_destTokens[0]); uint256 startingBalance = dstToken0.balanceOf(message.receiver); - vm.expectCall(s_destTokens[0], abi.encodeWithSelector(IERC20.transfer.selector, address(s_receiver), amounts[0])); + vm.expectCall( + address(dstToken0), + abi.encodeWithSelector( + IERC20.transferFrom.selector, s_destPoolByToken[address(dstToken0)], address(s_receiver), amounts[0] + ) + ); (Internal.MessageExecutionState newState, bytes memory err) = s_offRamp.trialExecute(message, new bytes[](message.tokenAmounts.length)); @@ -1548,7 +1552,7 @@ contract EVM2EVMOffRamp__releaseOrMintToken is EVM2EVMOffRampSetup { bytes memory revertData = "call reverted :o"; - vm.mockCallRevert(destToken, abi.encodeWithSelector(IERC20.transfer.selector, receiver, amount), revertData); + vm.mockCallRevert(destToken, abi.encodeWithSelector(IERC20.approve.selector, s_offRamp, amount), revertData); vm.expectRevert(abi.encodeWithSelector(EVM2EVMOffRamp.TokenHandlingError.selector, revertData)); s_offRamp.releaseOrMintToken(amount, originalSender, receiver, sourceTokenData, offchainTokenData); @@ -1595,7 +1599,6 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup { function test_releaseOrMintTokens_destDenominatedDecimals_Success() public { Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts(); - address destToken = s_destFeeToken; uint256 amount = 100; uint256 destinationDenominationMultiplier = 1000; srcTokenAmounts[0].amount = amount; @@ -1605,24 +1608,29 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup { bytes[] memory encodedSourceTokenData = _getDefaultSourceTokenData(srcTokenAmounts); Internal.SourceTokenData memory sourceTokenData = abi.decode(encodedSourceTokenData[0], (Internal.SourceTokenData)); - // Since the pool call is mocked, we manually release funds to the offRamp - deal(destToken, address(s_offRamp), amount * destinationDenominationMultiplier); + address pool = s_destPoolBySourceToken[srcTokenAmounts[0].token]; + address destToken = s_destTokenBySourceToken[srcTokenAmounts[0].token]; + + // Since the pool call is mocked, we manually approve funds to the offRamp + deal(destToken, pool, amount * destinationDenominationMultiplier); + vm.startPrank(pool); + IERC20(destToken).approve(address(s_offRamp), amount * destinationDenominationMultiplier); + vm.startPrank(OWNER); + + Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ + originalSender: originalSender, + receiver: OWNER, + amount: amount, + localToken: destToken, + remoteChainSelector: SOURCE_CHAIN_SELECTOR, + sourcePoolAddress: sourceTokenData.sourcePoolAddress, + sourcePoolData: sourceTokenData.extraData, + offchainTokenData: offchainTokenData[0] + }); vm.mockCall( - s_destPoolBySourceToken[srcTokenAmounts[0].token], - abi.encodeWithSelector( - LockReleaseTokenPool.releaseOrMint.selector, - Pool.ReleaseOrMintInV1({ - originalSender: originalSender, - receiver: OWNER, - amount: amount, - localToken: s_destTokenBySourceToken[srcTokenAmounts[0].token], - remoteChainSelector: SOURCE_CHAIN_SELECTOR, - sourcePoolAddress: sourceTokenData.sourcePoolAddress, - sourcePoolData: sourceTokenData.extraData, - offchainTokenData: offchainTokenData[0] - }) - ), + pool, + abi.encodeWithSelector(LockReleaseTokenPool.releaseOrMint.selector, releaseOrMintIn), abi.encode(amount * destinationDenominationMultiplier) ); diff --git a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol index 91e47a7e98..d2864a762c 100644 --- a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol @@ -65,7 +65,7 @@ contract EVM2EVMOnRampSetup is TokenSetup, PriceRegistrySetup { minFeeUSDCents: 1_00, // 1 USD maxFeeUSDCents: 1000_00, // 1,000 USD deciBps: 2_5, // 2.5 bps, or 0.025% - destGasOverhead: 100_000, + destGasOverhead: 140_000, destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES), aggregateRateLimitEnabled: true }) @@ -76,7 +76,7 @@ contract EVM2EVMOnRampSetup is TokenSetup, PriceRegistrySetup { minFeeUSDCents: 2_00, // 1 USD maxFeeUSDCents: 500_00, // 500 USD deciBps: 10_0, // 10 bps, or 0.1% - destGasOverhead: 90_000, + destGasOverhead: 130_000, destBytesOverhead: 200, aggregateRateLimitEnabled: true }) diff --git a/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol index c628c510d4..71b7819fbf 100644 --- a/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol +++ b/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol @@ -111,7 +111,7 @@ contract BurnMintTokenPool_releaseOrMint is BurnMintTokenPoolSetup { vm.startPrank(s_burnMintOffRamp); vm.expectEmit(); - emit IERC20.Transfer(address(0), address(s_burnMintOffRamp), amount); + emit IERC20.Approval(address(s_pool), address(s_burnMintOffRamp), amount); s_pool.releaseOrMint( Pool.ReleaseOrMintInV1({ originalSender: bytes(""), @@ -125,7 +125,7 @@ contract BurnMintTokenPool_releaseOrMint is BurnMintTokenPoolSetup { }) ); - assertEq(s_burnMintERC677.balanceOf(s_burnMintOffRamp), amount); + assertEq(s_burnMintERC677.allowance(address(s_pool), s_burnMintOffRamp), amount); } function test_PoolMintNotHealthy_Revert() public { diff --git a/core/gethwrappers/ccip/generated/burn_from_mint_token_pool/burn_from_mint_token_pool.go b/core/gethwrappers/ccip/generated/burn_from_mint_token_pool/burn_from_mint_token_pool.go index e5a9e0be79..89a5cac840 100644 --- a/core/gethwrappers/ccip/generated/burn_from_mint_token_pool/burn_from_mint_token_pool.go +++ b/core/gethwrappers/ccip/generated/burn_from_mint_token_pool/burn_from_mint_token_pool.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var BurnFromMintTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620044e0380380620044e08339810160408190526200003491620008c0565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c2816200018f565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c05262000168576040805160008152602081019091526200016890846200023a565b5062000185925050506001600160a01b0385163060001962000397565b5050505062000afc565b336001600160a01b03821603620001e95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200025b576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002e65760008382815181106200027f576200027f620009d0565b60209081029190910101519050620002996002826200047d565b15620002dc576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200025e565b5060005b8151811015620003925760008282815181106200030b576200030b620009d0565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000337575062000389565b620003446002826200049d565b1562000387576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002ea565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620009e6565b6200041b919062000a16565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200047791869190620004b416565b50505050565b600062000494836001600160a01b03841662000585565b90505b92915050565b600062000494836001600160a01b03841662000689565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000503906001600160a01b038516908490620006db565b80519091501562000392578080602001905181019062000524919062000a2c565b620003925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b600081815260018301602052604081205480156200067e576000620005ac60018362000a57565b8554909150600090620005c29060019062000a57565b90508181146200062e576000866000018281548110620005e657620005e6620009d0565b90600052602060002001549050808760000184815481106200060c576200060c620009d0565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000642576200064262000a6d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000497565b600091505062000497565b6000818152600183016020526040812054620006d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000497565b50600062000497565b6060620006ec8484600085620006f4565b949350505050565b606082471015620007575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b0316858760405162000775919062000aa9565b60006040518083038185875af1925050503d8060008114620007b4576040519150601f19603f3d011682016040523d82523d6000602084013e620007b9565b606091505b509092509050620007cd87838387620007d8565b979650505050505050565b606083156200084c57825160000362000844576001600160a01b0385163b620008445760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620006ec565b620006ec8383815115620008635781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000ac7565b6001600160a01b03811681146200089557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008bb816200087f565b919050565b60008060008060808587031215620008d757600080fd5b8451620008e4816200087f565b602086810151919550906001600160401b03808211156200090457600080fd5b818801915088601f8301126200091957600080fd5b8151818111156200092e576200092e62000898565b8060051b604051601f19603f8301168101818110858211171562000956576200095662000898565b60405291825284820192508381018501918b8311156200097557600080fd5b938501935b828510156200099e576200098e85620008ae565b845293850193928501926200097a565b809850505050505050620009b560408601620008ae565b9150620009c560608601620008ae565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000497576200049762000a00565b60006020828403121562000a3f57600080fd5b8151801515811462000a5057600080fd5b9392505050565b8181038181111562000497576200049762000a00565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aa057818101518382015260200162000a86565b50506000910152565b6000825162000abd81846020870162000a83565b9190910192915050565b602081526000825180602084015262000ae881604085016020870162000a83565b601f01601f19169190910160400192915050565b60805160a05160c05161396762000b79600039600081816104dd0152818161174c01526121300152600081816104b70152818161157d0152611a020152600081816102390152818161028e015281816107010152818161149d0152818161192201528181611b1a015281816120c6015261231b01526139676000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc146104a2578063dc0bd971146104b5578063e0351e13146104db578063f2fde38b1461050157600080fd5b8063c4bffe2b14610467578063c75eea9c1461047c578063cf7401f31461048f57600080fd5b8063b0f479a1116100c8578063b0f479a114610423578063b794658014610441578063c0d786551461045457600080fd5b80639a4575b91461037f578063a7cd63b71461039f578063af58d59f146103b457600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146103335780637d54534e1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b806354c8a4f3146102ed5780636d3d1a581461030257806378a010b21461032057600080fd5b806321df0da71161018c57806321df0da714610237578063240028e81461027e57806339077537146102cb57600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612abe565b610514565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612b1d565b6105f9565b6040516101d29190612b9c565b6101ee6040518060400160405280601f81526020017f4275726e46726f6d4d696e74546f6b656e506f6f6c20312e352e302d6465760081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c661028c366004612bdc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102de6102d9366004612bf9565b6106a9565b604051905181526020016101d2565b6103006102fb366004612c81565b610804565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610259565b61030061032e366004612ced565b61087f565b6103006109f3565b610300610349366004612bdc565b610af0565b6101c661035c366004612b1d565b610b3f565b60005473ffffffffffffffffffffffffffffffffffffffff16610259565b61039261038d366004612d70565b610b56565b6040516101d29190612dab565b6103a7610bfd565b6040516101d29190612e0b565b6103c76103c2366004612b1d565b610c0e565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610259565b6101ee61044f366004612b1d565b610ce3565b610300610462366004612bdc565b610d0e565b61046f610de9565b6040516101d29190612e65565b6103c761048a366004612b1d565b610ea1565b61030061049d366004612fcd565b610f73565b6103006104b0366004613012565b610ffc565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b61030061050f366004612bdc565b611482565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105a757507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061062490613054565b80601f016020809104026020016040519081016040528092919081815260200182805461065090613054565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6040805160208101909152600081526106c96106c483613152565b611496565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50610783925050506060830160408401612bdc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f084606001356040516107e591815260200190565b60405180910390a3506040805160208101909152606090910135815290565b61080c6116c7565b6108798484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061174a92505050565b50505050565b6108876116c7565b61089083610b3f565b6108d7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546108fe90613054565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90613054565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505067ffffffffffffffff86166000908152600760205260409020919250506004016109a6838583613297565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf8285856040516109e5939291906133b1565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016108ce565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610af86116c7565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105f3600567ffffffffffffffff8416611900565b6040805180820190915260608082526020820152610b7b610b7683613415565b61191b565b610b888260600135611ae5565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610be284602001602081019061044f9190612b1d565b81526040805160208181019092526000815291015292915050565b6060610c096002611b8e565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105f390611b9b565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061062490613054565b610d166116c7565b73ffffffffffffffffffffffffffffffffffffffff8116610d63576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610df76005611b8e565b90506000815167ffffffffffffffff811115610e1557610e15612ea7565b604051908082528060200260200182016040528015610e3e578160200160208202803683370190505b50905060005b8251811015610e9a57828181518110610e5f57610e5f6134b7565b6020026020010151828281518110610e7957610e796134b7565b67ffffffffffffffff90921660209283029190910190910152600101610e44565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105f390611b9b565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590610fb3575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610fec576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b610ff7838383611c4d565b505050565b6110046116c7565b60005b81811015610ff7576000838383818110611023576110236134b7565b905060200281019061103591906134e6565b61103e90613524565b90506110538160800151826020015115611d37565b6110668160a00151826020015115611d37565b8060200151156113625780516110889060059067ffffffffffffffff16611e70565b6110cd5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108ce565b60408101515115806110e25750606081015151155b15611119576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906112fa90826135d8565b506060820151600582019061130f90826135d8565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061135594939291906136f2565b60405180910390a1611479565b805161137a9060059067ffffffffffffffff16611e7c565b6113bf5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108ce565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114286004830182612a70565b611436600583016000612a70565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611007565b61148a6116c7565b61149381611e88565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161461152b5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108ce565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd919061378b565b15611634576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116418160200151611f7d565b600061165082602001516105f9565b9050805160001480611674575080805190602001208260a001518051906020012014155b156116b1578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016108ce9190612b9c565b6116c3826020015183606001516120a3565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016108ce565b565b7f00000000000000000000000000000000000000000000000000000000000000006117a1576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156118375760008382815181106117c1576117c16134b7565b602002602001015190506117df8160026120ea90919063ffffffff16565b1561182e5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016117a4565b5060005b8151811015610ff7576000828281518110611858576118586134b7565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189c57506118f8565b6118a760028261210c565b156118f65760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161183b565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146119b05760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108ce565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a82919061378b565b15611ab9576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac6816040015161212e565b611ad381602001516121ad565b611493816020015182606001516122fb565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015611b7357600080fd5b505af1158015611b87573d6000803e3d6000fd5b5050505050565b606060006119148361233f565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611c2982606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611c0d91906137d7565b85608001516fffffffffffffffffffffffffffffffff1661239a565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611c5683610b3f565b611c98576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016108ce565b611ca3826000611d37565b67ffffffffffffffff83166000908152600760205260409020611cc690836123c4565b611cd1816000611d37565b67ffffffffffffffff83166000908152600760205260409020611cf790600201826123c4565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611d2a939291906137ea565b60405180910390a1505050565b815115611dfe5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611d8d575060408201516fffffffffffffffffffffffffffffffff16155b15611dc657816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016108ce919061386d565b80156116c3576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611e37575060208201516fffffffffffffffffffffffffffffffff1615155b156116c357816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016108ce919061386d565b60006119148383612566565b600061191483836125b5565b3373ffffffffffffffffffffffffffffffffffffffff821603611f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016108ce565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b611f8681610b3f565b611fc8576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108ce565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206b919061378b565b611493576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b67ffffffffffffffff821660009081526007602052604090206116c390600201827f00000000000000000000000000000000000000000000000000000000000000006126a8565b60006119148373ffffffffffffffffffffffffffffffffffffffff84166125b5565b60006119148373ffffffffffffffffffffffffffffffffffffffff8416612566565b7f0000000000000000000000000000000000000000000000000000000000000000156114935761215f600282612a2b565b611493576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108ce565b6121b681610b3f565b6121f8576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108ce565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229591906138a9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611493576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b67ffffffffffffffff821660009081526007602052604090206116c390827f00000000000000000000000000000000000000000000000000000000000000006126a8565b60608160000180548060200260200160405190810160405280929190818152602001828054801561069d57602002820191906000526020600020905b81548152602001906001019080831161237b5750505050509050919050565b60006123b9856123aa84866138c6565b6123b490876138dd565b612a5a565b90505b949350505050565b81546000906123ed90700100000000000000000000000000000000900463ffffffff16426137d7565b9050801561248f5760018301548354612435916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661239a565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546124b5916fffffffffffffffffffffffffffffffff9081169116612a5a565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611d2a90849061386d565b60008181526001830160205260408120546125ad575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105f3565b5060006105f3565b6000818152600183016020526040812054801561269e5760006125d96001836137d7565b85549091506000906125ed906001906137d7565b905081811461265257600086600001828154811061260d5761260d6134b7565b9060005260206000200154905080876000018481548110612630576126306134b7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612663576126636138f0565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105f3565b60009150506105f3565b825474010000000000000000000000000000000000000000900460ff1615806126cf575081155b156126d957505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061271f90700100000000000000000000000000000000900463ffffffff16426137d7565b905080156127df5781831115612761576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461279b9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661239a565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156128965773ffffffffffffffffffffffffffffffffffffffff841661283e576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016108ce565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016108ce565b848310156129a95760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906128da90826137d7565b6128e4878a6137d7565b6128ee91906138dd565b6128f8919061391f565b905073ffffffffffffffffffffffffffffffffffffffff8616612951576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016108ce565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016108ce565b6129b385846137d7565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611914565b6000818310612a695781611914565b5090919050565b508054612a7c90613054565b6000825580601f10612a8c575050565b601f01602090049060005260206000209081019061149391905b80821115612aba5760008155600101612aa6565b5090565b600060208284031215612ad057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461191457600080fd5b803567ffffffffffffffff81168114612b1857600080fd5b919050565b600060208284031215612b2f57600080fd5b61191482612b00565b6000815180845260005b81811015612b5e57602081850181015186830182015201612b42565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006119146020830184612b38565b73ffffffffffffffffffffffffffffffffffffffff8116811461149357600080fd5b8035612b1881612baf565b600060208284031215612bee57600080fd5b813561191481612baf565b600060208284031215612c0b57600080fd5b813567ffffffffffffffff811115612c2257600080fd5b8201610100818503121561191457600080fd5b60008083601f840112612c4757600080fd5b50813567ffffffffffffffff811115612c5f57600080fd5b6020830191508360208260051b8501011115612c7a57600080fd5b9250929050565b60008060008060408587031215612c9757600080fd5b843567ffffffffffffffff80821115612caf57600080fd5b612cbb88838901612c35565b90965094506020870135915080821115612cd457600080fd5b50612ce187828801612c35565b95989497509550505050565b600080600060408486031215612d0257600080fd5b612d0b84612b00565b9250602084013567ffffffffffffffff80821115612d2857600080fd5b818601915086601f830112612d3c57600080fd5b813581811115612d4b57600080fd5b876020828501011115612d5d57600080fd5b6020830194508093505050509250925092565b600060208284031215612d8257600080fd5b813567ffffffffffffffff811115612d9957600080fd5b820160a0818503121561191457600080fd5b602081526000825160406020840152612dc76060840182612b38565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612e028282612b38565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e5957835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612e27565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e5957835167ffffffffffffffff1683529284019291840191600101612e81565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612efa57612efa612ea7565b60405290565b60405160c0810167ffffffffffffffff81118282101715612efa57612efa612ea7565b801515811461149357600080fd5b8035612b1881612f23565b80356fffffffffffffffffffffffffffffffff81168114612b1857600080fd5b600060608284031215612f6e57600080fd5b6040516060810181811067ffffffffffffffff82111715612f9157612f91612ea7565b6040529050808235612fa281612f23565b8152612fb060208401612f3c565b6020820152612fc160408401612f3c565b60408201525092915050565b600080600060e08486031215612fe257600080fd5b612feb84612b00565b9250612ffa8560208601612f5c565b91506130098560808601612f5c565b90509250925092565b6000806020838503121561302557600080fd5b823567ffffffffffffffff81111561303c57600080fd5b61304885828601612c35565b90969095509350505050565b600181811c9082168061306857607f821691505b6020821081036130a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126130b857600080fd5b813567ffffffffffffffff808211156130d3576130d3612ea7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561311957613119612ea7565b8160405283815286602085880101111561313257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561316557600080fd5b61316d612ed6565b823567ffffffffffffffff8082111561318557600080fd5b613191368387016130a7565b835261319f60208601612b00565b60208401526131b060408601612bd1565b6040840152606085013560608401526131cb60808601612bd1565b608084015260a08501359150808211156131e457600080fd5b6131f0368387016130a7565b60a084015260c085013591508082111561320957600080fd5b613215368387016130a7565b60c084015260e085013591508082111561322e57600080fd5b5061323b368286016130a7565b60e08301525092915050565b601f821115610ff7576000816000526020600020601f850160051c810160208610156132705750805b601f850160051c820191505b8181101561328f5782815560010161327c565b505050505050565b67ffffffffffffffff8311156132af576132af612ea7565b6132c3836132bd8354613054565b83613247565b6000601f84116001811461331557600085156132df5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611b87565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156133645786850135825560209485019460019092019101613344565b508682101561339f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006133c46040830186612b38565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a0823603121561342757600080fd5b60405160a0810167ffffffffffffffff828210818311171561344b5761344b612ea7565b81604052843591508082111561346057600080fd5b5061346d368286016130a7565b82525061347c60208401612b00565b6020820152604083013561348f81612baf565b60408201526060838101359082015260808301356134ac81612baf565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261351a57600080fd5b9190910192915050565b6000610140823603121561353757600080fd5b61353f612f00565b61354883612b00565b815261355660208401612f31565b6020820152604083013567ffffffffffffffff8082111561357657600080fd5b613582368387016130a7565b6040840152606085013591508082111561359b57600080fd5b506135a8368286016130a7565b6060830152506135bb3660808501612f5c565b60808201526135cd3660e08501612f5c565b60a082015292915050565b815167ffffffffffffffff8111156135f2576135f2612ea7565b613606816136008454613054565b84613247565b602080601f83116001811461365957600084156136235750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561328f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156136a657888601518255948401946001909101908401613687565b50858210156136e257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff8716835280602084015261371681840187612b38565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506137549050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612e02565b60006020828403121561379d57600080fd5b815161191481612f23565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105f3576105f36137a8565b67ffffffffffffffff8416815260e0810161383660208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c08301526123bc565b606081016105f382848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156138bb57600080fd5b815161191481612baf565b80820281158282048414176105f3576105f36137a8565b808201808211156105f3576105f36137a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082613955577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", + Bin: "0x60e06040523480156200001157600080fd5b50604051620045a1380380620045a18339810160408190526200003491620008c0565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c2816200018f565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c05262000168576040805160008152602081019091526200016890846200023a565b5062000185925050506001600160a01b0385163060001962000397565b5050505062000afc565b336001600160a01b03821603620001e95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200025b576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002e65760008382815181106200027f576200027f620009d0565b60209081029190910101519050620002996002826200047d565b15620002dc576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200025e565b5060005b8151811015620003925760008282815181106200030b576200030b620009d0565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000337575062000389565b620003446002826200049d565b1562000387576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002ea565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620009e6565b6200041b919062000a16565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200047791869190620004b416565b50505050565b600062000494836001600160a01b03841662000585565b90505b92915050565b600062000494836001600160a01b03841662000689565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000503906001600160a01b038516908490620006db565b80519091501562000392578080602001905181019062000524919062000a2c565b620003925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b600081815260018301602052604081205480156200067e576000620005ac60018362000a57565b8554909150600090620005c29060019062000a57565b90508181146200062e576000866000018281548110620005e657620005e6620009d0565b90600052602060002001549050808760000184815481106200060c576200060c620009d0565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000642576200064262000a6d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000497565b600091505062000497565b6000818152600183016020526040812054620006d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000497565b50600062000497565b6060620006ec8484600085620006f4565b949350505050565b606082471015620007575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b0316858760405162000775919062000aa9565b60006040518083038185875af1925050503d8060008114620007b4576040519150601f19603f3d011682016040523d82523d6000602084013e620007b9565b606091505b509092509050620007cd87838387620007d8565b979650505050505050565b606083156200084c57825160000362000844576001600160a01b0385163b620008445760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620006ec565b620006ec8383815115620008635781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000ac7565b6001600160a01b03811681146200089557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008bb816200087f565b919050565b60008060008060808587031215620008d757600080fd5b8451620008e4816200087f565b602086810151919550906001600160401b03808211156200090457600080fd5b818801915088601f8301126200091957600080fd5b8151818111156200092e576200092e62000898565b8060051b604051601f19603f8301168101818110858211171562000956576200095662000898565b60405291825284820192508381018501918b8311156200097557600080fd5b938501935b828510156200099e576200098e85620008ae565b845293850193928501926200097a565b809850505050505050620009b560408601620008ae565b9150620009c560608601620008ae565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000497576200049762000a00565b60006020828403121562000a3f57600080fd5b8151801515811462000a5057600080fd5b9392505050565b8181038181111562000497576200049762000a00565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aa057818101518382015260200162000a86565b50506000910152565b6000825162000abd81846020870162000a83565b9190910192915050565b602081526000825180602084015262000ae881604085016020870162000a83565b601f01601f19169190910160400192915050565b60805160a05160c051613a2162000b80600039600081816104dd0152818161180601526121ea0152600081816104b7015281816116370152611abc0152600081816102390152818161028e01528181610701015281816107a801528181611557015281816119dc01528181611bd40152818161218001526123d50152613a216000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc146104a2578063dc0bd971146104b5578063e0351e13146104db578063f2fde38b1461050157600080fd5b8063c4bffe2b14610467578063c75eea9c1461047c578063cf7401f31461048f57600080fd5b8063b0f479a1116100c8578063b0f479a114610423578063b794658014610441578063c0d786551461045457600080fd5b80639a4575b91461037f578063a7cd63b71461039f578063af58d59f146103b457600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146103335780637d54534e1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b806354c8a4f3146102ed5780636d3d1a581461030257806378a010b21461032057600080fd5b806321df0da71161018c57806321df0da714610237578063240028e81461027e57806339077537146102cb57600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612b78565b610514565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612bd7565b6105f9565b6040516101d29190612c56565b6101ee6040518060400160405280601f81526020017f4275726e46726f6d4d696e74546f6b656e506f6f6c20312e352e302d6465760081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c661028c366004612c96565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102de6102d9366004612cb3565b6106a9565b604051905181526020016101d2565b6103006102fb366004612d3b565b6108be565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610259565b61030061032e366004612da7565b610939565b610300610aad565b610300610349366004612c96565b610baa565b6101c661035c366004612bd7565b610bf9565b60005473ffffffffffffffffffffffffffffffffffffffff16610259565b61039261038d366004612e2a565b610c10565b6040516101d29190612e65565b6103a7610cb7565b6040516101d29190612ec5565b6103c76103c2366004612bd7565b610cc8565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610259565b6101ee61044f366004612bd7565b610d9d565b610300610462366004612c96565b610dc8565b61046f610ea3565b6040516101d29190612f1f565b6103c761048a366004612bd7565b610f5b565b61030061049d366004613087565b61102d565b6103006104b03660046130cc565b6110b6565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b61030061050f366004612c96565b61153c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105a757507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106249061310e565b80601f01602080910402602001604051908101604052809291908181526020018280546106509061310e565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6040805160208101909152600081526106c96106c48361320c565b611550565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152336004820152606085013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063095ea7b391506044016020604051808303816000875af1158015610808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082c9190613301565b5061083d6060830160408401612c96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161089f91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108c6611781565b6109338484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061180492505050565b50505050565b610941611781565b61094a83610bf9565b610991576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109b89061310e565b80601f01602080910402602001604051908101604052809291908181526020018280546109e49061310e565b8015610a315780601f10610a0657610100808354040283529160200191610a31565b820191906000526020600020905b815481529060010190602001808311610a1457829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a6083858361336e565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a9f93929190613488565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610988565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610bb2611781565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105f3600567ffffffffffffffff84166119ba565b6040805180820190915260608082526020820152610c35610c30836134ec565b6119d5565b610c428260600135611b9f565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610c9c84602001602081019061044f9190612bd7565b81526040805160208181019092526000815291015292915050565b6060610cc36002611c48565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105f390611c55565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106249061310e565b610dd0611781565b73ffffffffffffffffffffffffffffffffffffffff8116610e1d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610eb16005611c48565b90506000815167ffffffffffffffff811115610ecf57610ecf612f61565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b50905060005b8251811015610f5457828181518110610f1957610f1961358e565b6020026020010151828281518110610f3357610f3361358e565b67ffffffffffffffff90921660209283029190910190910152600101610efe565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105f390611c55565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061106d575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156110a6576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b6110b1838383611d07565b505050565b6110be611781565b60005b818110156110b15760008383838181106110dd576110dd61358e565b90506020028101906110ef91906135bd565b6110f8906135fb565b905061110d8160800151826020015115611df1565b6111208160a00151826020015115611df1565b80602001511561141c5780516111429060059067ffffffffffffffff16611f2a565b6111875780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610988565b604081015151158061119c5750606081015151155b156111d3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906113b490826136af565b50606082015160058201906113c990826136af565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061140f94939291906137c9565b60405180910390a1611533565b80516114349060059067ffffffffffffffff16611f36565b6114795780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610988565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114e26004830182612b2a565b6114f0600583016000612b2a565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016110c1565b611544611781565b61154d81611f42565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146115e55760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610988565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b79190613301565b156116ee576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fb8160200151612037565b600061170a82602001516105f9565b905080516000148061172e575080805190602001208260a001518051906020012014155b1561176b578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109889190612c56565b61177d8260200151836060015161215d565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610988565b565b7f000000000000000000000000000000000000000000000000000000000000000061185b576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156118f157600083828151811061187b5761187b61358e565b602002602001015190506118998160026121a490919063ffffffff16565b156118e85760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010161185e565b5060005b81518110156110b15760008282815181106119125761191261358e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195657506119b2565b6119616002826121c6565b156119b05760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b6001016118f5565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611a6a5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610988565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c9190613301565b15611b73576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8081604001516121e8565b611b8d8160200151612267565b61154d816020015182606001516123b5565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b5050505050565b606060006119ce836123f9565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611ce382606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611cc79190613891565b85608001516fffffffffffffffffffffffffffffffff16612454565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611d1083610bf9565b611d52576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610988565b611d5d826000611df1565b67ffffffffffffffff83166000908152600760205260409020611d80908361247e565b611d8b816000611df1565b67ffffffffffffffff83166000908152600760205260409020611db1906002018261247e565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611de4939291906138a4565b60405180910390a1505050565b815115611eb85781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611e47575060408201516fffffffffffffffffffffffffffffffff16155b15611e8057816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109889190613927565b801561177d576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611ef1575060208201516fffffffffffffffffffffffffffffffff1615155b1561177d57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109889190613927565b60006119ce8383612620565b60006119ce838361266f565b3373ffffffffffffffffffffffffffffffffffffffff821603611fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610988565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61204081610bf9565b612082576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610988565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121259190613301565b61154d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b67ffffffffffffffff8216600090815260076020526040902061177d90600201827f0000000000000000000000000000000000000000000000000000000000000000612762565b60006119ce8373ffffffffffffffffffffffffffffffffffffffff841661266f565b60006119ce8373ffffffffffffffffffffffffffffffffffffffff8416612620565b7f00000000000000000000000000000000000000000000000000000000000000001561154d57612219600282612ae5565b61154d576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610988565b61227081610bf9565b6122b2576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610988565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561232b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234f9190613963565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461154d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b67ffffffffffffffff8216600090815260076020526040902061177d90827f0000000000000000000000000000000000000000000000000000000000000000612762565b60608160000180548060200260200160405190810160405280929190818152602001828054801561069d57602002820191906000526020600020905b8154815260200190600101908083116124355750505050509050919050565b6000612473856124648486613980565b61246e9087613997565b612b14565b90505b949350505050565b81546000906124a790700100000000000000000000000000000000900463ffffffff1642613891565b9050801561254957600183015483546124ef916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612454565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461256f916fffffffffffffffffffffffffffffffff9081169116612b14565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611de4908490613927565b6000818152600183016020526040812054612667575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105f3565b5060006105f3565b60008181526001830160205260408120548015612758576000612693600183613891565b85549091506000906126a790600190613891565b905081811461270c5760008660000182815481106126c7576126c761358e565b90600052602060002001549050808760000184815481106126ea576126ea61358e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061271d5761271d6139aa565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105f3565b60009150506105f3565b825474010000000000000000000000000000000000000000900460ff161580612789575081155b1561279357505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906127d990700100000000000000000000000000000000900463ffffffff1642613891565b90508015612899578183111561281b576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546128559083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612454565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156129505773ffffffffffffffffffffffffffffffffffffffff84166128f8576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610988565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610988565b84831015612a635760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906129949082613891565b61299e878a613891565b6129a89190613997565b6129b291906139d9565b905073ffffffffffffffffffffffffffffffffffffffff8616612a0b576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610988565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610988565b612a6d8584613891565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156119ce565b6000818310612b2357816119ce565b5090919050565b508054612b369061310e565b6000825580601f10612b46575050565b601f01602090049060005260206000209081019061154d91905b80821115612b745760008155600101612b60565b5090565b600060208284031215612b8a57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119ce57600080fd5b803567ffffffffffffffff81168114612bd257600080fd5b919050565b600060208284031215612be957600080fd5b6119ce82612bba565b6000815180845260005b81811015612c1857602081850181015186830182015201612bfc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006119ce6020830184612bf2565b73ffffffffffffffffffffffffffffffffffffffff8116811461154d57600080fd5b8035612bd281612c69565b600060208284031215612ca857600080fd5b81356119ce81612c69565b600060208284031215612cc557600080fd5b813567ffffffffffffffff811115612cdc57600080fd5b820161010081850312156119ce57600080fd5b60008083601f840112612d0157600080fd5b50813567ffffffffffffffff811115612d1957600080fd5b6020830191508360208260051b8501011115612d3457600080fd5b9250929050565b60008060008060408587031215612d5157600080fd5b843567ffffffffffffffff80821115612d6957600080fd5b612d7588838901612cef565b90965094506020870135915080821115612d8e57600080fd5b50612d9b87828801612cef565b95989497509550505050565b600080600060408486031215612dbc57600080fd5b612dc584612bba565b9250602084013567ffffffffffffffff80821115612de257600080fd5b818601915086601f830112612df657600080fd5b813581811115612e0557600080fd5b876020828501011115612e1757600080fd5b6020830194508093505050509250925092565b600060208284031215612e3c57600080fd5b813567ffffffffffffffff811115612e5357600080fd5b820160a081850312156119ce57600080fd5b602081526000825160406020840152612e816060840182612bf2565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612ebc8282612bf2565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f1357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612ee1565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f1357835167ffffffffffffffff1683529284019291840191600101612f3b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612fb457612fb4612f61565b60405290565b60405160c0810167ffffffffffffffff81118282101715612fb457612fb4612f61565b801515811461154d57600080fd5b8035612bd281612fdd565b80356fffffffffffffffffffffffffffffffff81168114612bd257600080fd5b60006060828403121561302857600080fd5b6040516060810181811067ffffffffffffffff8211171561304b5761304b612f61565b604052905080823561305c81612fdd565b815261306a60208401612ff6565b602082015261307b60408401612ff6565b60408201525092915050565b600080600060e0848603121561309c57600080fd5b6130a584612bba565b92506130b48560208601613016565b91506130c38560808601613016565b90509250925092565b600080602083850312156130df57600080fd5b823567ffffffffffffffff8111156130f657600080fd5b61310285828601612cef565b90969095509350505050565b600181811c9082168061312257607f821691505b60208210810361315b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261317257600080fd5b813567ffffffffffffffff8082111561318d5761318d612f61565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156131d3576131d3612f61565b816040528381528660208588010111156131ec57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561321f57600080fd5b613227612f90565b823567ffffffffffffffff8082111561323f57600080fd5b61324b36838701613161565b835261325960208601612bba565b602084015261326a60408601612c8b565b60408401526060850135606084015261328560808601612c8b565b608084015260a085013591508082111561329e57600080fd5b6132aa36838701613161565b60a084015260c08501359150808211156132c357600080fd5b6132cf36838701613161565b60c084015260e08501359150808211156132e857600080fd5b506132f536828601613161565b60e08301525092915050565b60006020828403121561331357600080fd5b81516119ce81612fdd565b601f8211156110b1576000816000526020600020601f850160051c810160208610156133475750805b601f850160051c820191505b8181101561336657828155600101613353565b505050505050565b67ffffffffffffffff83111561338657613386612f61565b61339a83613394835461310e565b8361331e565b6000601f8411600181146133ec57600085156133b65750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611c41565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561343b578685013582556020948501946001909201910161341b565b5086821015613476577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60408152600061349b6040830186612bf2565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a082360312156134fe57600080fd5b60405160a0810167ffffffffffffffff828210818311171561352257613522612f61565b81604052843591508082111561353757600080fd5b5061354436828601613161565b82525061355360208401612bba565b6020820152604083013561356681612c69565b604082015260608381013590820152608083013561358381612c69565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18336030181126135f157600080fd5b9190910192915050565b6000610140823603121561360e57600080fd5b613616612fba565b61361f83612bba565b815261362d60208401612feb565b6020820152604083013567ffffffffffffffff8082111561364d57600080fd5b61365936838701613161565b6040840152606085013591508082111561367257600080fd5b5061367f36828601613161565b6060830152506136923660808501613016565b60808201526136a43660e08501613016565b60a082015292915050565b815167ffffffffffffffff8111156136c9576136c9612f61565b6136dd816136d7845461310e565b8461331e565b602080601f83116001811461373057600084156136fa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613366565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561377d5788860151825594840194600190910190840161375e565b50858210156137b957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526137ed81840187612bf2565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff908116606087015290870151166080850152915061382b9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612ebc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105f3576105f3613862565b67ffffffffffffffff8416815260e081016138f060208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612476565b606081016105f382848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561397557600080fd5b81516119ce81612c69565b80820281158282048414176105f3576105f3613862565b808201808211156105f3576105f3613862565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082613a0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", } var BurnFromMintTokenPoolABI = BurnFromMintTokenPoolMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/burn_mint_token_pool/burn_mint_token_pool.go b/core/gethwrappers/ccip/generated/burn_mint_token_pool/burn_mint_token_pool.go index 500b31ec51..6c7cc7083b 100644 --- a/core/gethwrappers/ccip/generated/burn_mint_token_pool/burn_mint_token_pool.go +++ b/core/gethwrappers/ccip/generated/burn_mint_token_pool/burn_mint_token_pool.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var BurnMintTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620040883803806200408883398101604081905262000034916200054c565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000176565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c052620001685760408051600081526020810190915262000168908462000221565b5050505050505050620006aa565b336001600160a01b03821603620001d05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000242576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002cd5760008382815181106200026657620002666200065c565b60209081029190910101519050620002806002826200037e565b15620002c3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000245565b5060005b815181101562000379576000828281518110620002f257620002f26200065c565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200031e575062000370565b6200032b6002826200039e565b156200036e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d1565b505050565b600062000395836001600160a01b038416620003b5565b90505b92915050565b600062000395836001600160a01b038416620004b9565b60008181526001830160205260408120548015620004ae576000620003dc60018362000672565b8554909150600090620003f29060019062000672565b90508181146200045e5760008660000182815481106200041657620004166200065c565b90600052602060002001549050808760000184815481106200043c576200043c6200065c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000472576200047262000694565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000398565b600091505062000398565b6000818152600183016020526040812054620005025750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000398565b50600062000398565b6001600160a01b03811681146200052157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000547816200050b565b919050565b600080600080608085870312156200056357600080fd5b845162000570816200050b565b602086810151919550906001600160401b03808211156200059057600080fd5b818801915088601f830112620005a557600080fd5b815181811115620005ba57620005ba62000524565b8060051b604051601f19603f83011681018181108582111715620005e257620005e262000524565b60405291825284820192508381018501918b8311156200060157600080fd5b938501935b828510156200062a576200061a856200053a565b8452938501939285019262000606565b80985050505050505062000641604086016200053a565b915062000651606086016200053a565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b818103818111156200039857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05161396162000727600039600081816104dd0152818161174c015261212a0152600081816104b70152818161157d0152611a020152600081816102390152818161028e015281816107010152818161149d0152818161192201528181611b14015281816120c0015261231501526139616000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc146104a2578063dc0bd971146104b5578063e0351e13146104db578063f2fde38b1461050157600080fd5b8063c4bffe2b14610467578063c75eea9c1461047c578063cf7401f31461048f57600080fd5b8063b0f479a1116100c8578063b0f479a114610423578063b794658014610441578063c0d786551461045457600080fd5b80639a4575b91461037f578063a7cd63b71461039f578063af58d59f146103b457600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146103335780637d54534e1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b806354c8a4f3146102ed5780636d3d1a581461030257806378a010b21461032057600080fd5b806321df0da71161018c57806321df0da714610237578063240028e81461027e57806339077537146102cb57600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612ab8565b610514565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612b17565b6105f9565b6040516101d29190612b96565b6101ee6040518060400160405280601b81526020017f4275726e4d696e74546f6b656e506f6f6c20312e352e302d646576000000000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c661028c366004612bd6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102de6102d9366004612bf3565b6106a9565b604051905181526020016101d2565b6103006102fb366004612c7b565b610804565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610259565b61030061032e366004612ce7565b61087f565b6103006109f3565b610300610349366004612bd6565b610af0565b6101c661035c366004612b17565b610b3f565b60005473ffffffffffffffffffffffffffffffffffffffff16610259565b61039261038d366004612d6a565b610b56565b6040516101d29190612da5565b6103a7610bfd565b6040516101d29190612e05565b6103c76103c2366004612b17565b610c0e565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610259565b6101ee61044f366004612b17565b610ce3565b610300610462366004612bd6565b610d0e565b61046f610de9565b6040516101d29190612e5f565b6103c761048a366004612b17565b610ea1565b61030061049d366004612fc7565b610f73565b6103006104b036600461300c565b610ffc565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b61030061050f366004612bd6565b611482565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105a757507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106249061304e565b80601f01602080910402602001604051908101604052809291908181526020018280546106509061304e565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6040805160208101909152600081526106c96106c48361314c565b611496565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50610783925050506060830160408401612bd6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f084606001356040516107e591815260200190565b60405180910390a3506040805160208101909152606090910135815290565b61080c6116c7565b6108798484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061174a92505050565b50505050565b6108876116c7565b61089083610b3f565b6108d7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546108fe9061304e565b80601f016020809104026020016040519081016040528092919081815260200182805461092a9061304e565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505067ffffffffffffffff86166000908152600760205260409020919250506004016109a6838583613291565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf8285856040516109e5939291906133ab565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016108ce565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610af86116c7565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105f3600567ffffffffffffffff8416611900565b6040805180820190915260608082526020820152610b7b610b768361340f565b61191b565b610b888260600135611ae5565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610be284602001602081019061044f9190612b17565b81526040805160208181019092526000815291015292915050565b6060610c096002611b88565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105f390611b95565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106249061304e565b610d166116c7565b73ffffffffffffffffffffffffffffffffffffffff8116610d63576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610df76005611b88565b90506000815167ffffffffffffffff811115610e1557610e15612ea1565b604051908082528060200260200182016040528015610e3e578160200160208202803683370190505b50905060005b8251811015610e9a57828181518110610e5f57610e5f6134b1565b6020026020010151828281518110610e7957610e796134b1565b67ffffffffffffffff90921660209283029190910190910152600101610e44565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105f390611b95565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590610fb3575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610fec576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b610ff7838383611c47565b505050565b6110046116c7565b60005b81811015610ff7576000838383818110611023576110236134b1565b905060200281019061103591906134e0565b61103e9061351e565b90506110538160800151826020015115611d31565b6110668160a00151826020015115611d31565b8060200151156113625780516110889060059067ffffffffffffffff16611e6a565b6110cd5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108ce565b60408101515115806110e25750606081015151155b15611119576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906112fa90826135d2565b506060820151600582019061130f90826135d2565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061135594939291906136ec565b60405180910390a1611479565b805161137a9060059067ffffffffffffffff16611e76565b6113bf5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108ce565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114286004830182612a6a565b611436600583016000612a6a565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611007565b61148a6116c7565b61149381611e82565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161461152b5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108ce565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190613785565b15611634576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116418160200151611f77565b600061165082602001516105f9565b9050805160001480611674575080805190602001208260a001518051906020012014155b156116b1578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016108ce9190612b96565b6116c38260200151836060015161209d565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016108ce565b565b7f00000000000000000000000000000000000000000000000000000000000000006117a1576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156118375760008382815181106117c1576117c16134b1565b602002602001015190506117df8160026120e490919063ffffffff16565b1561182e5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016117a4565b5060005b8151811015610ff7576000828281518110611858576118586134b1565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189c57506118f8565b6118a7600282612106565b156118f65760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161183b565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146119b05760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108ce565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a829190613785565b15611ab9576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac68160400151612128565b611ad381602001516121a7565b611493816020015182606001516122f5565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015611b6d57600080fd5b505af1158015611b81573d6000803e3d6000fd5b5050505050565b6060600061191483612339565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611c2382606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611c0791906137d1565b85608001516fffffffffffffffffffffffffffffffff16612394565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611c5083610b3f565b611c92576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016108ce565b611c9d826000611d31565b67ffffffffffffffff83166000908152600760205260409020611cc090836123be565b611ccb816000611d31565b67ffffffffffffffff83166000908152600760205260409020611cf190600201826123be565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611d24939291906137e4565b60405180910390a1505050565b815115611df85781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611d87575060408201516fffffffffffffffffffffffffffffffff16155b15611dc057816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016108ce9190613867565b80156116c3576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611e31575060208201516fffffffffffffffffffffffffffffffff1615155b156116c357816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016108ce9190613867565b60006119148383612560565b600061191483836125af565b3373ffffffffffffffffffffffffffffffffffffffff821603611f01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016108ce565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b611f8081610b3f565b611fc2576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108ce565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120659190613785565b611493576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b67ffffffffffffffff821660009081526007602052604090206116c390600201827f00000000000000000000000000000000000000000000000000000000000000006126a2565b60006119148373ffffffffffffffffffffffffffffffffffffffff84166125af565b60006119148373ffffffffffffffffffffffffffffffffffffffff8416612560565b7f00000000000000000000000000000000000000000000000000000000000000001561149357612159600282612a25565b611493576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108ce565b6121b081610b3f565b6121f2576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108ce565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561226b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228f91906138a3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611493576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108ce565b67ffffffffffffffff821660009081526007602052604090206116c390827f00000000000000000000000000000000000000000000000000000000000000006126a2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561069d57602002820191906000526020600020905b8154815260200190600101908083116123755750505050509050919050565b60006123b3856123a484866138c0565b6123ae90876138d7565b612a54565b90505b949350505050565b81546000906123e790700100000000000000000000000000000000900463ffffffff16426137d1565b90508015612489576001830154835461242f916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612394565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546124af916fffffffffffffffffffffffffffffffff9081169116612a54565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611d24908490613867565b60008181526001830160205260408120546125a7575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105f3565b5060006105f3565b600081815260018301602052604081205480156126985760006125d36001836137d1565b85549091506000906125e7906001906137d1565b905081811461264c576000866000018281548110612607576126076134b1565b906000526020600020015490508087600001848154811061262a5761262a6134b1565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061265d5761265d6138ea565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105f3565b60009150506105f3565b825474010000000000000000000000000000000000000000900460ff1615806126c9575081155b156126d357505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061271990700100000000000000000000000000000000900463ffffffff16426137d1565b905080156127d9578183111561275b576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546127959083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612394565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156128905773ffffffffffffffffffffffffffffffffffffffff8416612838576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016108ce565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016108ce565b848310156129a35760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906128d490826137d1565b6128de878a6137d1565b6128e891906138d7565b6128f29190613919565b905073ffffffffffffffffffffffffffffffffffffffff861661294b576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016108ce565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016108ce565b6129ad85846137d1565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611914565b6000818310612a635781611914565b5090919050565b508054612a769061304e565b6000825580601f10612a86575050565b601f01602090049060005260206000209081019061149391905b80821115612ab45760008155600101612aa0565b5090565b600060208284031215612aca57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461191457600080fd5b803567ffffffffffffffff81168114612b1257600080fd5b919050565b600060208284031215612b2957600080fd5b61191482612afa565b6000815180845260005b81811015612b5857602081850181015186830182015201612b3c565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006119146020830184612b32565b73ffffffffffffffffffffffffffffffffffffffff8116811461149357600080fd5b8035612b1281612ba9565b600060208284031215612be857600080fd5b813561191481612ba9565b600060208284031215612c0557600080fd5b813567ffffffffffffffff811115612c1c57600080fd5b8201610100818503121561191457600080fd5b60008083601f840112612c4157600080fd5b50813567ffffffffffffffff811115612c5957600080fd5b6020830191508360208260051b8501011115612c7457600080fd5b9250929050565b60008060008060408587031215612c9157600080fd5b843567ffffffffffffffff80821115612ca957600080fd5b612cb588838901612c2f565b90965094506020870135915080821115612cce57600080fd5b50612cdb87828801612c2f565b95989497509550505050565b600080600060408486031215612cfc57600080fd5b612d0584612afa565b9250602084013567ffffffffffffffff80821115612d2257600080fd5b818601915086601f830112612d3657600080fd5b813581811115612d4557600080fd5b876020828501011115612d5757600080fd5b6020830194508093505050509250925092565b600060208284031215612d7c57600080fd5b813567ffffffffffffffff811115612d9357600080fd5b820160a0818503121561191457600080fd5b602081526000825160406020840152612dc16060840182612b32565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612dfc8282612b32565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e5357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612e21565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e5357835167ffffffffffffffff1683529284019291840191600101612e7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612ef457612ef4612ea1565b60405290565b60405160c0810167ffffffffffffffff81118282101715612ef457612ef4612ea1565b801515811461149357600080fd5b8035612b1281612f1d565b80356fffffffffffffffffffffffffffffffff81168114612b1257600080fd5b600060608284031215612f6857600080fd5b6040516060810181811067ffffffffffffffff82111715612f8b57612f8b612ea1565b6040529050808235612f9c81612f1d565b8152612faa60208401612f36565b6020820152612fbb60408401612f36565b60408201525092915050565b600080600060e08486031215612fdc57600080fd5b612fe584612afa565b9250612ff48560208601612f56565b91506130038560808601612f56565b90509250925092565b6000806020838503121561301f57600080fd5b823567ffffffffffffffff81111561303657600080fd5b61304285828601612c2f565b90969095509350505050565b600181811c9082168061306257607f821691505b60208210810361309b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126130b257600080fd5b813567ffffffffffffffff808211156130cd576130cd612ea1565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561311357613113612ea1565b8160405283815286602085880101111561312c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561315f57600080fd5b613167612ed0565b823567ffffffffffffffff8082111561317f57600080fd5b61318b368387016130a1565b835261319960208601612afa565b60208401526131aa60408601612bcb565b6040840152606085013560608401526131c560808601612bcb565b608084015260a08501359150808211156131de57600080fd5b6131ea368387016130a1565b60a084015260c085013591508082111561320357600080fd5b61320f368387016130a1565b60c084015260e085013591508082111561322857600080fd5b50613235368286016130a1565b60e08301525092915050565b601f821115610ff7576000816000526020600020601f850160051c8101602086101561326a5750805b601f850160051c820191505b8181101561328957828155600101613276565b505050505050565b67ffffffffffffffff8311156132a9576132a9612ea1565b6132bd836132b7835461304e565b83613241565b6000601f84116001811461330f57600085156132d95750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611b81565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561335e578685013582556020948501946001909201910161333e565b5086821015613399577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006133be6040830186612b32565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a0823603121561342157600080fd5b60405160a0810167ffffffffffffffff828210818311171561344557613445612ea1565b81604052843591508082111561345a57600080fd5b50613467368286016130a1565b82525061347660208401612afa565b6020820152604083013561348981612ba9565b60408201526060838101359082015260808301356134a681612ba9565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261351457600080fd5b9190910192915050565b6000610140823603121561353157600080fd5b613539612efa565b61354283612afa565b815261355060208401612f2b565b6020820152604083013567ffffffffffffffff8082111561357057600080fd5b61357c368387016130a1565b6040840152606085013591508082111561359557600080fd5b506135a2368286016130a1565b6060830152506135b53660808501612f56565b60808201526135c73660e08501612f56565b60a082015292915050565b815167ffffffffffffffff8111156135ec576135ec612ea1565b613600816135fa845461304e565b84613241565b602080601f831160018114613653576000841561361d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613289565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156136a057888601518255948401946001909101908401613681565b50858210156136dc57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff8716835280602084015261371081840187612b32565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff908116606087015290870151166080850152915061374e9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612dfc565b60006020828403121561379757600080fd5b815161191481612f1d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105f3576105f36137a2565b67ffffffffffffffff8416815260e0810161383060208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c08301526123b6565b606081016105f382848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156138b557600080fd5b815161191481612ba9565b80820281158282048414176105f3576105f36137a2565b808201808211156105f3576105f36137a2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008261394f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", + Bin: "0x60e06040523480156200001157600080fd5b50604051620041493803806200414983398101604081905262000034916200054c565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000176565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c052620001685760408051600081526020810190915262000168908462000221565b5050505050505050620006aa565b336001600160a01b03821603620001d05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000242576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002cd5760008382815181106200026657620002666200065c565b60209081029190910101519050620002806002826200037e565b15620002c3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000245565b5060005b815181101562000379576000828281518110620002f257620002f26200065c565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200031e575062000370565b6200032b6002826200039e565b156200036e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d1565b505050565b600062000395836001600160a01b038416620003b5565b90505b92915050565b600062000395836001600160a01b038416620004b9565b60008181526001830160205260408120548015620004ae576000620003dc60018362000672565b8554909150600090620003f29060019062000672565b90508181146200045e5760008660000182815481106200041657620004166200065c565b90600052602060002001549050808760000184815481106200043c576200043c6200065c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000472576200047262000694565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000398565b600091505062000398565b6000818152600183016020526040812054620005025750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000398565b50600062000398565b6001600160a01b03811681146200052157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000547816200050b565b919050565b600080600080608085870312156200056357600080fd5b845162000570816200050b565b602086810151919550906001600160401b03808211156200059057600080fd5b818801915088601f830112620005a557600080fd5b815181811115620005ba57620005ba62000524565b8060051b604051601f19603f83011681018181108582111715620005e257620005e262000524565b60405291825284820192508381018501918b8311156200060157600080fd5b938501935b828510156200062a576200061a856200053a565b8452938501939285019262000606565b80985050505050505062000641604086016200053a565b915062000651606086016200053a565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b818103818111156200039857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051613a1b6200072e600039600081816104dd0152818161180601526121e40152600081816104b7015281816116370152611abc0152600081816102390152818161028e01528181610701015281816107a801528181611557015281816119dc01528181611bce0152818161217a01526123cf0152613a1b6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc146104a2578063dc0bd971146104b5578063e0351e13146104db578063f2fde38b1461050157600080fd5b8063c4bffe2b14610467578063c75eea9c1461047c578063cf7401f31461048f57600080fd5b8063b0f479a1116100c8578063b0f479a114610423578063b794658014610441578063c0d786551461045457600080fd5b80639a4575b91461037f578063a7cd63b71461039f578063af58d59f146103b457600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146103335780637d54534e1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b806354c8a4f3146102ed5780636d3d1a581461030257806378a010b21461032057600080fd5b806321df0da71161018c57806321df0da714610237578063240028e81461027e57806339077537146102cb57600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612b72565b610514565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612bd1565b6105f9565b6040516101d29190612c50565b6101ee6040518060400160405280601b81526020017f4275726e4d696e74546f6b656e506f6f6c20312e352e302d646576000000000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c661028c366004612c90565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102de6102d9366004612cad565b6106a9565b604051905181526020016101d2565b6103006102fb366004612d35565b6108be565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610259565b61030061032e366004612da1565b610939565b610300610aad565b610300610349366004612c90565b610baa565b6101c661035c366004612bd1565b610bf9565b60005473ffffffffffffffffffffffffffffffffffffffff16610259565b61039261038d366004612e24565b610c10565b6040516101d29190612e5f565b6103a7610cb7565b6040516101d29190612ebf565b6103c76103c2366004612bd1565b610cc8565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610259565b6101ee61044f366004612bd1565b610d9d565b610300610462366004612c90565b610dc8565b61046f610ea3565b6040516101d29190612f19565b6103c761048a366004612bd1565b610f5b565b61030061049d366004613081565b61102d565b6103006104b03660046130c6565b6110b6565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b61030061050f366004612c90565b61153c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105a757507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061062490613108565b80601f016020809104026020016040519081016040528092919081815260200182805461065090613108565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6040805160208101909152600081526106c96106c483613206565b611550565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152336004820152606085013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063095ea7b391506044016020604051808303816000875af1158015610808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082c91906132fb565b5061083d6060830160408401612c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161089f91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108c6611781565b6109338484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061180492505050565b50505050565b610941611781565b61094a83610bf9565b610991576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109b890613108565b80601f01602080910402602001604051908101604052809291908181526020018280546109e490613108565b8015610a315780601f10610a0657610100808354040283529160200191610a31565b820191906000526020600020905b815481529060010190602001808311610a1457829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a60838583613368565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a9f93929190613482565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610988565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610bb2611781565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105f3600567ffffffffffffffff84166119ba565b6040805180820190915260608082526020820152610c35610c30836134e6565b6119d5565b610c428260600135611b9f565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610c9c84602001602081019061044f9190612bd1565b81526040805160208181019092526000815291015292915050565b6060610cc36002611c42565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105f390611c4f565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061062490613108565b610dd0611781565b73ffffffffffffffffffffffffffffffffffffffff8116610e1d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610eb16005611c42565b90506000815167ffffffffffffffff811115610ecf57610ecf612f5b565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b50905060005b8251811015610f5457828181518110610f1957610f19613588565b6020026020010151828281518110610f3357610f33613588565b67ffffffffffffffff90921660209283029190910190910152600101610efe565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105f390611c4f565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061106d575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156110a6576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b6110b1838383611d01565b505050565b6110be611781565b60005b818110156110b15760008383838181106110dd576110dd613588565b90506020028101906110ef91906135b7565b6110f8906135f5565b905061110d8160800151826020015115611deb565b6111208160a00151826020015115611deb565b80602001511561141c5780516111429060059067ffffffffffffffff16611f24565b6111875780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610988565b604081015151158061119c5750606081015151155b156111d3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906113b490826136a9565b50606082015160058201906113c990826136a9565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061140f94939291906137c3565b60405180910390a1611533565b80516114349060059067ffffffffffffffff16611f30565b6114795780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610988565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114e26004830182612b24565b6114f0600583016000612b24565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016110c1565b611544611781565b61154d81611f3c565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146115e55760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610988565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906132fb565b156116ee576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fb8160200151612031565b600061170a82602001516105f9565b905080516000148061172e575080805190602001208260a001518051906020012014155b1561176b578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109889190612c50565b61177d82602001518360600151612157565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610988565b565b7f000000000000000000000000000000000000000000000000000000000000000061185b576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156118f157600083828151811061187b5761187b613588565b6020026020010151905061189981600261219e90919063ffffffff16565b156118e85760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010161185e565b5060005b81518110156110b157600082828151811061191257611912613588565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195657506119b2565b6119616002826121c0565b156119b05760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b6001016118f5565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611a6a5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610988565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c91906132fb565b15611b73576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8081604001516121e2565b611b8d8160200151612261565b61154d816020015182606001516123af565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b5050505050565b606060006119ce836123f3565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611cdd82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611cc1919061388b565b85608001516fffffffffffffffffffffffffffffffff1661244e565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611d0a83610bf9565b611d4c576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610988565b611d57826000611deb565b67ffffffffffffffff83166000908152600760205260409020611d7a9083612478565b611d85816000611deb565b67ffffffffffffffff83166000908152600760205260409020611dab9060020182612478565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611dde9392919061389e565b60405180910390a1505050565b815115611eb25781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611e41575060408201516fffffffffffffffffffffffffffffffff16155b15611e7a57816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109889190613921565b801561177d576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611eeb575060208201516fffffffffffffffffffffffffffffffff1615155b1561177d57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109889190613921565b60006119ce838361261a565b60006119ce8383612669565b3373ffffffffffffffffffffffffffffffffffffffff821603611fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610988565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61203a81610bf9565b61207c576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610988565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f91906132fb565b61154d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b67ffffffffffffffff8216600090815260076020526040902061177d90600201827f000000000000000000000000000000000000000000000000000000000000000061275c565b60006119ce8373ffffffffffffffffffffffffffffffffffffffff8416612669565b60006119ce8373ffffffffffffffffffffffffffffffffffffffff841661261a565b7f00000000000000000000000000000000000000000000000000000000000000001561154d57612213600282612adf565b61154d576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610988565b61226a81610bf9565b6122ac576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610988565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612349919061395d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461154d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610988565b67ffffffffffffffff8216600090815260076020526040902061177d90827f000000000000000000000000000000000000000000000000000000000000000061275c565b60608160000180548060200260200160405190810160405280929190818152602001828054801561069d57602002820191906000526020600020905b81548152602001906001019080831161242f5750505050509050919050565b600061246d8561245e848661397a565b6124689087613991565b612b0e565b90505b949350505050565b81546000906124a190700100000000000000000000000000000000900463ffffffff164261388b565b9050801561254357600183015483546124e9916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661244e565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612569916fffffffffffffffffffffffffffffffff9081169116612b0e565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611dde908490613921565b6000818152600183016020526040812054612661575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105f3565b5060006105f3565b6000818152600183016020526040812054801561275257600061268d60018361388b565b85549091506000906126a19060019061388b565b90508181146127065760008660000182815481106126c1576126c1613588565b90600052602060002001549050808760000184815481106126e4576126e4613588565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612717576127176139a4565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105f3565b60009150506105f3565b825474010000000000000000000000000000000000000000900460ff161580612783575081155b1561278d57505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906127d390700100000000000000000000000000000000900463ffffffff164261388b565b905080156128935781831115612815576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461284f9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661244e565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561294a5773ffffffffffffffffffffffffffffffffffffffff84166128f2576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610988565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610988565b84831015612a5d5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061298e908261388b565b612998878a61388b565b6129a29190613991565b6129ac91906139d3565b905073ffffffffffffffffffffffffffffffffffffffff8616612a05576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610988565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610988565b612a67858461388b565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156119ce565b6000818310612b1d57816119ce565b5090919050565b508054612b3090613108565b6000825580601f10612b40575050565b601f01602090049060005260206000209081019061154d91905b80821115612b6e5760008155600101612b5a565b5090565b600060208284031215612b8457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119ce57600080fd5b803567ffffffffffffffff81168114612bcc57600080fd5b919050565b600060208284031215612be357600080fd5b6119ce82612bb4565b6000815180845260005b81811015612c1257602081850181015186830182015201612bf6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006119ce6020830184612bec565b73ffffffffffffffffffffffffffffffffffffffff8116811461154d57600080fd5b8035612bcc81612c63565b600060208284031215612ca257600080fd5b81356119ce81612c63565b600060208284031215612cbf57600080fd5b813567ffffffffffffffff811115612cd657600080fd5b820161010081850312156119ce57600080fd5b60008083601f840112612cfb57600080fd5b50813567ffffffffffffffff811115612d1357600080fd5b6020830191508360208260051b8501011115612d2e57600080fd5b9250929050565b60008060008060408587031215612d4b57600080fd5b843567ffffffffffffffff80821115612d6357600080fd5b612d6f88838901612ce9565b90965094506020870135915080821115612d8857600080fd5b50612d9587828801612ce9565b95989497509550505050565b600080600060408486031215612db657600080fd5b612dbf84612bb4565b9250602084013567ffffffffffffffff80821115612ddc57600080fd5b818601915086601f830112612df057600080fd5b813581811115612dff57600080fd5b876020828501011115612e1157600080fd5b6020830194508093505050509250925092565b600060208284031215612e3657600080fd5b813567ffffffffffffffff811115612e4d57600080fd5b820160a081850312156119ce57600080fd5b602081526000825160406020840152612e7b6060840182612bec565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612eb68282612bec565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f0d57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612edb565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f0d57835167ffffffffffffffff1683529284019291840191600101612f35565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612fae57612fae612f5b565b60405290565b60405160c0810167ffffffffffffffff81118282101715612fae57612fae612f5b565b801515811461154d57600080fd5b8035612bcc81612fd7565b80356fffffffffffffffffffffffffffffffff81168114612bcc57600080fd5b60006060828403121561302257600080fd5b6040516060810181811067ffffffffffffffff8211171561304557613045612f5b565b604052905080823561305681612fd7565b815261306460208401612ff0565b602082015261307560408401612ff0565b60408201525092915050565b600080600060e0848603121561309657600080fd5b61309f84612bb4565b92506130ae8560208601613010565b91506130bd8560808601613010565b90509250925092565b600080602083850312156130d957600080fd5b823567ffffffffffffffff8111156130f057600080fd5b6130fc85828601612ce9565b90969095509350505050565b600181811c9082168061311c57607f821691505b602082108103613155577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261316c57600080fd5b813567ffffffffffffffff8082111561318757613187612f5b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156131cd576131cd612f5b565b816040528381528660208588010111156131e657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561321957600080fd5b613221612f8a565b823567ffffffffffffffff8082111561323957600080fd5b6132453683870161315b565b835261325360208601612bb4565b602084015261326460408601612c85565b60408401526060850135606084015261327f60808601612c85565b608084015260a085013591508082111561329857600080fd5b6132a43683870161315b565b60a084015260c08501359150808211156132bd57600080fd5b6132c93683870161315b565b60c084015260e08501359150808211156132e257600080fd5b506132ef3682860161315b565b60e08301525092915050565b60006020828403121561330d57600080fd5b81516119ce81612fd7565b601f8211156110b1576000816000526020600020601f850160051c810160208610156133415750805b601f850160051c820191505b818110156133605782815560010161334d565b505050505050565b67ffffffffffffffff83111561338057613380612f5b565b6133948361338e8354613108565b83613318565b6000601f8411600181146133e657600085156133b05750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611c3b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156134355786850135825560209485019460019092019101613415565b5086821015613470577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006134956040830186612bec565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a082360312156134f857600080fd5b60405160a0810167ffffffffffffffff828210818311171561351c5761351c612f5b565b81604052843591508082111561353157600080fd5b5061353e3682860161315b565b82525061354d60208401612bb4565b6020820152604083013561356081612c63565b604082015260608381013590820152608083013561357d81612c63565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18336030181126135eb57600080fd5b9190910192915050565b6000610140823603121561360857600080fd5b613610612fb4565b61361983612bb4565b815261362760208401612fe5565b6020820152604083013567ffffffffffffffff8082111561364757600080fd5b6136533683870161315b565b6040840152606085013591508082111561366c57600080fd5b506136793682860161315b565b60608301525061368c3660808501613010565b608082015261369e3660e08501613010565b60a082015292915050565b815167ffffffffffffffff8111156136c3576136c3612f5b565b6136d7816136d18454613108565b84613318565b602080601f83116001811461372a57600084156136f45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613360565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561377757888601518255948401946001909101908401613758565b50858210156137b357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526137e781840187612bec565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506138259050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612eb6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105f3576105f361385c565b67ffffffffffffffff8416815260e081016138ea60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612470565b606081016105f382848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561396f57600080fd5b81516119ce81612c63565b80820281158282048414176105f3576105f361385c565b808201808211156105f3576105f361385c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082613a09577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", } var BurnMintTokenPoolABI = BurnMintTokenPoolMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go b/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go index 2c24ff0c6c..5ad79ab872 100644 --- a/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go +++ b/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var BurnMintTokenPoolAndProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200492538038062004925833981016040819052620000349162000554565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200017e565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000229565b505050505050505050505050620006b2565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000664565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000664565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200067a565b8554909150600090620003fa906001906200067a565b9050818114620004665760008660000182815481106200041e576200041e62000664565b906000526020600020015490508087600001848154811062000444576200044462000664565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a6200069c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b600080600080608085870312156200056b57600080fd5b8451620005788162000513565b602086810151919550906001600160401b03808211156200059857600080fd5b818801915088601f830112620005ad57600080fd5b815181811115620005c257620005c26200052c565b8060051b604051601f19603f83011681018181108582111715620005ea57620005ea6200052c565b60405291825284820192508381018501918b8311156200060957600080fd5b938501935b828510156200063257620006228562000542565b845293850193928501926200060e565b809850505050505050620006496040860162000542565b9150620006596060860162000542565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c0516141ef620007366000396000818161050301528181611a7701526124c90152600081816104dd0152818161180f0152611d2a0152600081816102260152818161027b0152818161076001528181610d9a0152818161172f01528181611c4a01528181611e300152818161245f01526126b401526141ef6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639766b93211610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc146104c8578063dc0bd971146104db578063e0351e1314610501578063f2fde38b1461052757600080fd5b8063c0d786551461047a578063c4bffe2b1461048d578063c75eea9c146104a2578063cf7401f3146104b557600080fd5b8063a8d87a3b116100de578063a8d87a3b146103c7578063af58d59f146103da578063b0f479a114610449578063b79465801461046757600080fd5b80639766b9321461037f5780639a4575b914610392578063a7cd63b7146103b257600080fd5b80636d3d1a58116101715780637d54534e1161014b5780637d54534e1461032857806383826b2b1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b80636d3d1a58146102ef57806378a010b21461030d57806379ba50971461032057600080fd5b806321df0da7116101ad57806321df0da714610224578063240028e81461026b57806339077537146102b857806354c8a4f3146102da57600080fd5b806301ffc9a7146101d45780630a2fd493146101fc578063181f5a771461021c575b600080fd5b6101e76101e2366004613161565b61053a565b60405190151581526020015b60405180910390f35b61020f61020a3660046131c0565b61061f565b6040516101f39190613249565b61020f6106cf565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e7610279366004613289565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102cb6102c63660046132a6565b6106eb565b604051905181526020016101f3565b6102ed6102e836600461332e565b610878565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61031b36600461339a565b6108f3565b6102ed610a67565b6102ed610336366004613289565b610b64565b6101e761034936600461341d565b610bb3565b6101e761035c3660046131c0565b610c80565b60005473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61038d366004613289565b610c97565b6103a56103a0366004613454565b610d26565b6040516101f3919061348f565b6103ba610e96565b6040516101f391906134ef565b6102466103d53660046131c0565b503090565b6103ed6103e83660046131c0565b610ea7565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610246565b61020f6104753660046131c0565b610f7c565b6102ed610488366004613289565b610fa7565b61049561107b565b6040516101f39190613549565b6103ed6104b03660046131c0565b611133565b6102ed6104c3366004613700565b611205565b6102ed6104d6366004613745565b61128e565b7f0000000000000000000000000000000000000000000000000000000000000000610246565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b6102ed610535366004613289565b611714565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061061957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061064a90613787565b80601f016020809104026020016040519081016040528092919081815260200182805461067690613787565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b50505050509050919050565b6040518060600160405280602381526020016141c06023913981565b60408051602081019091526000815261070b61070683613876565b611728565b60095473ffffffffffffffffffffffffffffffffffffffff166107d6576040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b1580156107b957600080fd5b505af11580156107cd573d6000803e3d6000fd5b505050506107e7565b6107e76107e283613876565b611959565b6107f76060830160408401613289565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161085991815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108806119f2565b6108ed84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611a7592505050565b50505050565b6108fb6119f2565b61090483610c80565b61094b576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff83166000908152600760205260408120600401805461097290613787565b80601f016020809104026020016040519081016040528092919081815260200182805461099e90613787565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a1a8385836139bb565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a5993929190613ad5565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610942565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b6c6119f2565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610c795750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190613b39565b9392505050565b6000610619600567ffffffffffffffff8416611c2b565b610c9f6119f2565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610d4b610d4683613b56565b611c43565b60095473ffffffffffffffffffffffffffffffffffffffff16610e10576040517f42966c68000000000000000000000000000000000000000000000000000000008152606083013560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b50505050610e21565b610e21610e1c83613b56565b611e0d565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610e7b84602001602081019061047591906131c0565b81526040805160208181019092526000815291015292915050565b6060610ea26002611f27565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261061990611f34565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061064a90613787565b610faf6119f2565b73ffffffffffffffffffffffffffffffffffffffff8116610ffc576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d1a565b606060006110896005611f27565b90506000815167ffffffffffffffff8111156110a7576110a761358b565b6040519080825280602002602001820160405280156110d0578160200160208202803683370190505b50905060005b825181101561112c578281815181106110f1576110f1613bf8565b602002602001015182828151811061110b5761110b613bf8565b67ffffffffffffffff909216602092830291909101909101526001016110d6565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261061990611f34565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611245575060005473ffffffffffffffffffffffffffffffffffffffff163314155b1561127e576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b611289838383611fe6565b505050565b6112966119f2565b60005b818110156112895760008383838181106112b5576112b5613bf8565b90506020028101906112c79190613c27565b6112d090613c65565b90506112e581608001518260200151156120d0565b6112f88160a001518260200151156120d0565b8060200151156115f457805161131a9060059067ffffffffffffffff16612209565b61135f5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610942565b60408101515115806113745750606081015151155b156113ab576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061158c9082613d19565b50606082015160058201906115a19082613d19565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506115e79493929190613e33565b60405180910390a161170b565b805161160c9060059067ffffffffffffffff16612215565b6116515780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610942565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906116ba6004830182613113565b6116c8600583016000613113565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611299565b61171c6119f2565b61172581612221565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146117bd5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610942565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f9190613b39565b156118c6576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d38160200151612316565b60006118e2826020015161061f565b9050805160001480611906575080805190602001208260a001518051906020012014155b15611943578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109429190613249565b6119558260200151836060015161243c565b5050565b6009548151606083015160208401516040517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941693638627fad6936119bd9390923392600401613ecc565b600060405180830381600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610942565b565b7f0000000000000000000000000000000000000000000000000000000000000000611acc576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611b62576000838281518110611aec57611aec613bf8565b60200260200101519050611b0a81600261248390919063ffffffff16565b15611b595760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611acf565b5060005b8151811015611289576000828281518110611b8357611b83613bf8565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bc75750611c23565b611bd26002826124a5565b15611c215760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611b66565b60008181526001830160205260408120541515610c79565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611cd85760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610942565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190613b39565b15611de1576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dee81604001516124c7565b611dfb8160200151612546565b61172581602001518260600151612694565b6009546060820151611e5a9173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116929116906126d8565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611ec294939291600401613f2d565b6000604051808303816000875af1158015611ee1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119559190810190613f8d565b60606000610c7983612765565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611fc282606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611fa6919061402a565b85608001516fffffffffffffffffffffffffffffffff166127c0565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611fef83610c80565b612031576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610942565b61203c8260006120d0565b67ffffffffffffffff8316600090815260076020526040902061205f90836127ea565b61206a8160006120d0565b67ffffffffffffffff8316600090815260076020526040902061209090600201826127ea565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516120c39392919061403d565b60405180910390a1505050565b8151156121975781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612126575060408201516fffffffffffffffffffffffffffffffff16155b1561215f57816040517f8020d12400000000000000000000000000000000000000000000000000000000815260040161094291906140c0565b8015611955576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff161515806121d0575060208201516fffffffffffffffffffffffffffffffff1615155b1561195557816040517fd68af9cc00000000000000000000000000000000000000000000000000000000815260040161094291906140c0565b6000610c79838361298c565b6000610c7983836129db565b3373ffffffffffffffffffffffffffffffffffffffff8216036122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610942565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61231f81610c80565b612361576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610942565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156123e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124049190613b39565b611725576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b67ffffffffffffffff8216600090815260076020526040902061195590600201827f0000000000000000000000000000000000000000000000000000000000000000612ace565b6000610c798373ffffffffffffffffffffffffffffffffffffffff84166129db565b6000610c798373ffffffffffffffffffffffffffffffffffffffff841661298c565b7f000000000000000000000000000000000000000000000000000000000000000015611725576124f8600282612e51565b611725576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610942565b61254f81610c80565b612591576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610942565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561260a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262e91906140fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611725576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b67ffffffffffffffff8216600090815260076020526040902061195590827f0000000000000000000000000000000000000000000000000000000000000000612ace565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611289908490612e80565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106c357602002820191906000526020600020905b8154815260200190600101908083116127a15750505050509050919050565b60006127df856127d08486614119565b6127da9087614130565b612f8c565b90505b949350505050565b815460009061281390700100000000000000000000000000000000900463ffffffff164261402a565b905080156128b5576001830154835461285b916fffffffffffffffffffffffffffffffff808216928116918591700100000000000000000000000000000000909104166127c0565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546128db916fffffffffffffffffffffffffffffffff9081169116612f8c565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906120c39084906140c0565b60008181526001830160205260408120546129d357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610619565b506000610619565b60008181526001830160205260408120548015612ac45760006129ff60018361402a565b8554909150600090612a139060019061402a565b9050818114612a78576000866000018281548110612a3357612a33613bf8565b9060005260206000200154905080876000018481548110612a5657612a56613bf8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612a8957612a89614143565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610619565b6000915050610619565b825474010000000000000000000000000000000000000000900460ff161580612af5575081155b15612aff57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612b4590700100000000000000000000000000000000900463ffffffff164261402a565b90508015612c055781831115612b87576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612bc19083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166127c0565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612cbc5773ffffffffffffffffffffffffffffffffffffffff8416612c64576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610942565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610942565b84831015612dcf5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612d00908261402a565b612d0a878a61402a565b612d149190614130565b612d1e9190614172565b905073ffffffffffffffffffffffffffffffffffffffff8616612d77576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610942565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610942565b612dd9858461402a565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610c79565b6000612ee2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fa29092919063ffffffff16565b8051909150156112895780806020019051810190612f009190613b39565b611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610942565b6000818310612f9b5781610c79565b5090919050565b60606127e28484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051612fd691906141ad565b60006040518083038185875af1925050503d8060008114613013576040519150601f19603f3d011682016040523d82523d6000602084013e613018565b606091505b509150915061302987838387613034565b979650505050505050565b606083156130ca5782516000036130c35773ffffffffffffffffffffffffffffffffffffffff85163b6130c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610942565b50816127e2565b6127e283838151156130df5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429190613249565b50805461311f90613787565b6000825580601f1061312f575050565b601f01602090049060005260206000209081019061172591905b8082111561315d5760008155600101613149565b5090565b60006020828403121561317357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c7957600080fd5b803567ffffffffffffffff811681146131bb57600080fd5b919050565b6000602082840312156131d257600080fd5b610c79826131a3565b60005b838110156131f65781810151838201526020016131de565b50506000910152565b600081518084526132178160208601602086016131db565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c7960208301846131ff565b73ffffffffffffffffffffffffffffffffffffffff8116811461172557600080fd5b80356131bb8161325c565b60006020828403121561329b57600080fd5b8135610c798161325c565b6000602082840312156132b857600080fd5b813567ffffffffffffffff8111156132cf57600080fd5b82016101008185031215610c7957600080fd5b60008083601f8401126132f457600080fd5b50813567ffffffffffffffff81111561330c57600080fd5b6020830191508360208260051b850101111561332757600080fd5b9250929050565b6000806000806040858703121561334457600080fd5b843567ffffffffffffffff8082111561335c57600080fd5b613368888389016132e2565b9096509450602087013591508082111561338157600080fd5b5061338e878288016132e2565b95989497509550505050565b6000806000604084860312156133af57600080fd5b6133b8846131a3565b9250602084013567ffffffffffffffff808211156133d557600080fd5b818601915086601f8301126133e957600080fd5b8135818111156133f857600080fd5b87602082850101111561340a57600080fd5b6020830194508093505050509250925092565b6000806040838503121561343057600080fd5b613439836131a3565b915060208301356134498161325c565b809150509250929050565b60006020828403121561346657600080fd5b813567ffffffffffffffff81111561347d57600080fd5b820160a08185031215610c7957600080fd5b6020815260008251604060208401526134ab60608401826131ff565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160408501526134e682826131ff565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353d57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161350b565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561353d57835167ffffffffffffffff1683529284019291840191600101613565565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156135de576135de61358b565b60405290565b60405160c0810167ffffffffffffffff811182821017156135de576135de61358b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561364e5761364e61358b565b604052919050565b801515811461172557600080fd5b80356131bb81613656565b80356fffffffffffffffffffffffffffffffff811681146131bb57600080fd5b6000606082840312156136a157600080fd5b6040516060810181811067ffffffffffffffff821117156136c4576136c461358b565b60405290508082356136d581613656565b81526136e36020840161366f565b60208201526136f46040840161366f565b60408201525092915050565b600080600060e0848603121561371557600080fd5b61371e846131a3565b925061372d856020860161368f565b915061373c856080860161368f565b90509250925092565b6000806020838503121561375857600080fd5b823567ffffffffffffffff81111561376f57600080fd5b61377b858286016132e2565b90969095509350505050565b600181811c9082168061379b57607f821691505b6020821081036137d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff8211156137f4576137f461358b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261383157600080fd5b813561384461383f826137da565b613607565b81815284602083860101111561385957600080fd5b816020850160208301376000918101602001919091529392505050565b6000610100823603121561388957600080fd5b6138916135ba565b823567ffffffffffffffff808211156138a957600080fd5b6138b536838701613820565b83526138c3602086016131a3565b60208401526138d46040860161327e565b6040840152606085013560608401526138ef6080860161327e565b608084015260a085013591508082111561390857600080fd5b61391436838701613820565b60a084015260c085013591508082111561392d57600080fd5b61393936838701613820565b60c084015260e085013591508082111561395257600080fd5b5061395f36828601613820565b60e08301525092915050565b601f821115611289576000816000526020600020601f850160051c810160208610156139945750805b601f850160051c820191505b818110156139b3578281556001016139a0565b505050505050565b67ffffffffffffffff8311156139d3576139d361358b565b6139e7836139e18354613787565b8361396b565b6000601f841160018114613a395760008515613a035750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556119eb565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613a885786850135825560209485019460019092019101613a68565b5086821015613ac3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000613ae860408301866131ff565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613b4b57600080fd5b8151610c7981613656565b600060a08236031215613b6857600080fd5b60405160a0810167ffffffffffffffff8282108183111715613b8c57613b8c61358b565b816040528435915080821115613ba157600080fd5b50613bae36828601613820565b825250613bbd602084016131a3565b60208201526040830135613bd08161325c565b6040820152606083810135908201526080830135613bed8161325c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613c5b57600080fd5b9190910192915050565b60006101408236031215613c7857600080fd5b613c806135e4565b613c89836131a3565b8152613c9760208401613664565b6020820152604083013567ffffffffffffffff80821115613cb757600080fd5b613cc336838701613820565b60408401526060850135915080821115613cdc57600080fd5b50613ce936828601613820565b606083015250613cfc366080850161368f565b6080820152613d0e3660e0850161368f565b60a082015292915050565b815167ffffffffffffffff811115613d3357613d3361358b565b613d4781613d418454613787565b8461396b565b602080601f831160018114613d9a5760008415613d645750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556139b3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613de757888601518255948401946001909101908401613dc8565b5085821015613e2357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613e57818401876131ff565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613e959050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e08301526134e6565b60a081526000613edf60a08301876131ff565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a060208201526000613f5c60a08301866131ff565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b600060208284031215613f9f57600080fd5b815167ffffffffffffffff811115613fb657600080fd5b8201601f81018413613fc757600080fd5b8051613fd561383f826137da565b818152856020838501011115613fea57600080fd5b6134e68260208301602086016131db565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561061957610619613ffb565b67ffffffffffffffff8416815260e0810161408960208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c08301526127e2565b6060810161061982848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561410e57600080fd5b8151610c798161325c565b808202811582820484141761061957610619613ffb565b8082018082111561061957610619613ffb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000826141a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613c5b8184602087016131db56fe4275726e4d696e74546f6b656e506f6f6c416e6450726f787920312e352e302d646576a164736f6c6343000818000a", + Bin: "0x60e06040523480156200001157600080fd5b50604051620049e7380380620049e7833981016040819052620000349162000554565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200017e565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000229565b505050505050505050505050620006b2565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000664565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000664565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200067a565b8554909150600090620003fa906001906200067a565b9050818114620004665760008660000182815481106200041e576200041e62000664565b906000526020600020015490508087600001848154811062000444576200044462000664565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a6200069c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b600080600080608085870312156200056b57600080fd5b8451620005788162000513565b602086810151919550906001600160401b03808211156200059857600080fd5b818801915088601f830112620005ad57600080fd5b815181811115620005c257620005c26200052c565b8060051b604051601f19603f83011681018181108582111715620005ea57620005ea6200052c565b60405291825284820192508381018501918b8311156200060957600080fd5b938501935b828510156200063257620006228562000542565b845293850193928501926200060e565b809850505050505050620006496040860162000542565b9150620006596060860162000542565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c0516142aa6200073d6000396000818161050301528181611b3101526125830152600081816104dd0152818161180f0152611de40152600081816102260152818161027b0152818161076001528181610d9a0152818161172f01528181611a2a01528181611d0401528181611eea01528181612519015261276e01526142aa6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639766b93211610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc146104c8578063dc0bd971146104db578063e0351e1314610501578063f2fde38b1461052757600080fd5b8063c0d786551461047a578063c4bffe2b1461048d578063c75eea9c146104a2578063cf7401f3146104b557600080fd5b8063a8d87a3b116100de578063a8d87a3b146103c7578063af58d59f146103da578063b0f479a114610449578063b79465801461046757600080fd5b80639766b9321461037f5780639a4575b914610392578063a7cd63b7146103b257600080fd5b80636d3d1a58116101715780637d54534e1161014b5780637d54534e1461032857806383826b2b1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b80636d3d1a58146102ef57806378a010b21461030d57806379ba50971461032057600080fd5b806321df0da7116101ad57806321df0da714610224578063240028e81461026b57806339077537146102b857806354c8a4f3146102da57600080fd5b806301ffc9a7146101d45780630a2fd493146101fc578063181f5a771461021c575b600080fd5b6101e76101e236600461321b565b61053a565b60405190151581526020015b60405180910390f35b61020f61020a36600461327a565b61061f565b6040516101f39190613303565b61020f6106cf565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e7610279366004613343565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102cb6102c6366004613360565b6106eb565b604051905181526020016101f3565b6102ed6102e83660046133e8565b610878565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61031b366004613454565b6108f3565b6102ed610a67565b6102ed610336366004613343565b610b64565b6101e76103493660046134d7565b610bb3565b6101e761035c36600461327a565b610c80565b60005473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61038d366004613343565b610c97565b6103a56103a036600461350e565b610d26565b6040516101f39190613549565b6103ba610e96565b6040516101f391906135a9565b6102466103d536600461327a565b503090565b6103ed6103e836600461327a565b610ea7565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610246565b61020f61047536600461327a565b610f7c565b6102ed610488366004613343565b610fa7565b61049561107b565b6040516101f39190613603565b6103ed6104b036600461327a565b611133565b6102ed6104c33660046137ba565b611205565b6102ed6104d63660046137ff565b61128e565b7f0000000000000000000000000000000000000000000000000000000000000000610246565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b6102ed610535366004613343565b611714565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061061957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061064a90613841565b80601f016020809104026020016040519081016040528092919081815260200182805461067690613841565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b50505050509050919050565b60405180606001604052806023815260200161427b6023913981565b60408051602081019091526000815261070b61070683613930565b611728565b60095473ffffffffffffffffffffffffffffffffffffffff166107d6576040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b1580156107b957600080fd5b505af11580156107cd573d6000803e3d6000fd5b505050506107e7565b6107e76107e283613930565b611959565b6107f76060830160408401613343565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161085991815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610880611aac565b6108ed84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611b2f92505050565b50505050565b6108fb611aac565b61090483610c80565b61094b576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff83166000908152600760205260408120600401805461097290613841565b80601f016020809104026020016040519081016040528092919081815260200182805461099e90613841565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a1a838583613a75565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a5993929190613b90565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610942565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b6c611aac565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610c795750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190613bf4565b9392505050565b6000610619600567ffffffffffffffff8416611ce5565b610c9f611aac565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610d4b610d4683613c11565b611cfd565b60095473ffffffffffffffffffffffffffffffffffffffff16610e10576040517f42966c68000000000000000000000000000000000000000000000000000000008152606083013560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b50505050610e21565b610e21610e1c83613c11565b611ec7565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610e7b846020016020810190610475919061327a565b81526040805160208181019092526000815291015292915050565b6060610ea26002611fe1565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261061990611fee565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061064a90613841565b610faf611aac565b73ffffffffffffffffffffffffffffffffffffffff8116610ffc576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d1a565b606060006110896005611fe1565b90506000815167ffffffffffffffff8111156110a7576110a7613645565b6040519080825280602002602001820160405280156110d0578160200160208202803683370190505b50905060005b825181101561112c578281815181106110f1576110f1613cb3565b602002602001015182828151811061110b5761110b613cb3565b67ffffffffffffffff909216602092830291909101909101526001016110d6565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261061990611fee565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611245575060005473ffffffffffffffffffffffffffffffffffffffff163314155b1561127e576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b6112898383836120a0565b505050565b611296611aac565b60005b818110156112895760008383838181106112b5576112b5613cb3565b90506020028101906112c79190613ce2565b6112d090613d20565b90506112e5816080015182602001511561218a565b6112f88160a0015182602001511561218a565b8060200151156115f457805161131a9060059067ffffffffffffffff166122c3565b61135f5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610942565b60408101515115806113745750606081015151155b156113ab576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061158c9082613dd4565b50606082015160058201906115a19082613dd4565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506115e79493929190613eee565b60405180910390a161170b565b805161160c9060059067ffffffffffffffff166122cf565b6116515780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610942565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906116ba60048301826131cd565b6116c86005830160006131cd565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611299565b61171c611aac565b611725816122db565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146117bd5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610942565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f9190613bf4565b156118c6576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d381602001516123d0565b60006118e2826020015161061f565b9050805160001480611906575080805190602001208260a001518051906020012014155b15611943578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109429190613303565b611955826020015183606001516124f6565b5050565b6009548151606083015160208401516040517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941693638627fad6936119bd9390923092600401613f87565b600060405180830381600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b5050505060608101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815233600482015260248101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063095ea7b3906044016020604051808303816000875af1158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119559190613bf4565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610942565b565b7f0000000000000000000000000000000000000000000000000000000000000000611b86576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611c1c576000838281518110611ba657611ba6613cb3565b60200260200101519050611bc481600261253d90919063ffffffff16565b15611c135760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611b89565b5060005b8151811015611289576000828281518110611c3d57611c3d613cb3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c815750611cdd565b611c8c60028261255f565b15611cdb5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611c20565b60008181526001830160205260408120541515610c79565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611d925760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610942565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190613bf4565b15611e9b576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ea88160400151612581565b611eb58160200151612600565b6117258160200151826060015161274e565b6009546060820151611f149173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612792565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611f7c94939291600401613fe8565b6000604051808303816000875af1158015611f9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119559190810190614048565b60606000610c798361281f565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261207c82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261206091906140e5565b85608001516fffffffffffffffffffffffffffffffff1661287a565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6120a983610c80565b6120eb576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610942565b6120f682600061218a565b67ffffffffffffffff8316600090815260076020526040902061211990836128a4565b61212481600061218a565b67ffffffffffffffff8316600090815260076020526040902061214a90600201826128a4565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161217d939291906140f8565b60405180910390a1505050565b8151156122515781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806121e0575060408201516fffffffffffffffffffffffffffffffff16155b1561221957816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610942919061417b565b8015611955576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff1615158061228a575060208201516fffffffffffffffffffffffffffffffff1615155b1561195557816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610942919061417b565b6000610c798383612a46565b6000610c798383612a95565b3373ffffffffffffffffffffffffffffffffffffffff82160361235a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610942565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6123d981610c80565b61241b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610942565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa15801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be9190613bf4565b611725576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b67ffffffffffffffff8216600090815260076020526040902061195590600201827f0000000000000000000000000000000000000000000000000000000000000000612b88565b6000610c798373ffffffffffffffffffffffffffffffffffffffff8416612a95565b6000610c798373ffffffffffffffffffffffffffffffffffffffff8416612a46565b7f000000000000000000000000000000000000000000000000000000000000000015611725576125b2600282612f0b565b611725576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610942565b61260981610c80565b61264b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610942565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e891906141b7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611725576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610942565b67ffffffffffffffff8216600090815260076020526040902061195590827f0000000000000000000000000000000000000000000000000000000000000000612b88565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611289908490612f3a565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106c357602002820191906000526020600020905b81548152602001906001019080831161285b5750505050509050919050565b60006128998561288a84866141d4565b61289490876141eb565b613046565b90505b949350505050565b81546000906128cd90700100000000000000000000000000000000900463ffffffff16426140e5565b9050801561296f5760018301548354612915916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661287a565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612995916fffffffffffffffffffffffffffffffff9081169116613046565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061217d90849061417b565b6000818152600183016020526040812054612a8d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610619565b506000610619565b60008181526001830160205260408120548015612b7e576000612ab96001836140e5565b8554909150600090612acd906001906140e5565b9050818114612b32576000866000018281548110612aed57612aed613cb3565b9060005260206000200154905080876000018481548110612b1057612b10613cb3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b4357612b436141fe565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610619565b6000915050610619565b825474010000000000000000000000000000000000000000900460ff161580612baf575081155b15612bb957505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612bff90700100000000000000000000000000000000900463ffffffff16426140e5565b90508015612cbf5781831115612c41576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612c7b9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661287a565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612d765773ffffffffffffffffffffffffffffffffffffffff8416612d1e576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610942565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610942565b84831015612e895760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612dba90826140e5565b612dc4878a6140e5565b612dce91906141eb565b612dd8919061422d565b905073ffffffffffffffffffffffffffffffffffffffff8616612e31576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610942565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610942565b612e9385846140e5565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610c79565b6000612f9c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661305c9092919063ffffffff16565b8051909150156112895780806020019051810190612fba9190613bf4565b611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610942565b60008183106130555781610c79565b5090919050565b606061289c8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130909190614268565b60006040518083038185875af1925050503d80600081146130cd576040519150601f19603f3d011682016040523d82523d6000602084013e6130d2565b606091505b50915091506130e3878383876130ee565b979650505050505050565b6060831561318457825160000361317d5773ffffffffffffffffffffffffffffffffffffffff85163b61317d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610942565b508161289c565b61289c83838151156131995781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429190613303565b5080546131d990613841565b6000825580601f106131e9575050565b601f01602090049060005260206000209081019061172591905b808211156132175760008155600101613203565b5090565b60006020828403121561322d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c7957600080fd5b803567ffffffffffffffff8116811461327557600080fd5b919050565b60006020828403121561328c57600080fd5b610c798261325d565b60005b838110156132b0578181015183820152602001613298565b50506000910152565b600081518084526132d1816020860160208601613295565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c7960208301846132b9565b73ffffffffffffffffffffffffffffffffffffffff8116811461172557600080fd5b803561327581613316565b60006020828403121561335557600080fd5b8135610c7981613316565b60006020828403121561337257600080fd5b813567ffffffffffffffff81111561338957600080fd5b82016101008185031215610c7957600080fd5b60008083601f8401126133ae57600080fd5b50813567ffffffffffffffff8111156133c657600080fd5b6020830191508360208260051b85010111156133e157600080fd5b9250929050565b600080600080604085870312156133fe57600080fd5b843567ffffffffffffffff8082111561341657600080fd5b6134228883890161339c565b9096509450602087013591508082111561343b57600080fd5b506134488782880161339c565b95989497509550505050565b60008060006040848603121561346957600080fd5b6134728461325d565b9250602084013567ffffffffffffffff8082111561348f57600080fd5b818601915086601f8301126134a357600080fd5b8135818111156134b257600080fd5b8760208285010111156134c457600080fd5b6020830194508093505050509250925092565b600080604083850312156134ea57600080fd5b6134f38361325d565b9150602083013561350381613316565b809150509250929050565b60006020828403121561352057600080fd5b813567ffffffffffffffff81111561353757600080fd5b820160a08185031215610c7957600080fd5b60208152600082516040602084015261356560608401826132b9565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160408501526135a082826132b9565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156135f757835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016135c5565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135f757835167ffffffffffffffff168352928401929184019160010161361f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561369857613698613645565b60405290565b60405160c0810167ffffffffffffffff8111828210171561369857613698613645565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561370857613708613645565b604052919050565b801515811461172557600080fd5b803561327581613710565b80356fffffffffffffffffffffffffffffffff8116811461327557600080fd5b60006060828403121561375b57600080fd5b6040516060810181811067ffffffffffffffff8211171561377e5761377e613645565b604052905080823561378f81613710565b815261379d60208401613729565b60208201526137ae60408401613729565b60408201525092915050565b600080600060e084860312156137cf57600080fd5b6137d88461325d565b92506137e78560208601613749565b91506137f68560808601613749565b90509250925092565b6000806020838503121561381257600080fd5b823567ffffffffffffffff81111561382957600080fd5b6138358582860161339c565b90969095509350505050565b600181811c9082168061385557607f821691505b60208210810361388e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff8211156138ae576138ae613645565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138eb57600080fd5b81356138fe6138f982613894565b6136c1565b81815284602083860101111561391357600080fd5b816020850160208301376000918101602001919091529392505050565b6000610100823603121561394357600080fd5b61394b613674565b823567ffffffffffffffff8082111561396357600080fd5b61396f368387016138da565b835261397d6020860161325d565b602084015261398e60408601613338565b6040840152606085013560608401526139a960808601613338565b608084015260a08501359150808211156139c257600080fd5b6139ce368387016138da565b60a084015260c08501359150808211156139e757600080fd5b6139f3368387016138da565b60c084015260e0850135915080821115613a0c57600080fd5b50613a19368286016138da565b60e08301525092915050565b601f821115611289576000816000526020600020601f850160051c81016020861015613a4e5750805b601f850160051c820191505b81811015613a6d57828155600101613a5a565b505050505050565b67ffffffffffffffff831115613a8d57613a8d613645565b613aa183613a9b8354613841565b83613a25565b6000601f841160018114613af35760008515613abd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613b89565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613b425786850135825560209485019460019092019101613b22565b5086821015613b7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000613ba360408301866132b9565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613c0657600080fd5b8151610c7981613710565b600060a08236031215613c2357600080fd5b60405160a0810167ffffffffffffffff8282108183111715613c4757613c47613645565b816040528435915080821115613c5c57600080fd5b50613c69368286016138da565b825250613c786020840161325d565b60208201526040830135613c8b81613316565b6040820152606083810135908201526080830135613ca881613316565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613d1657600080fd5b9190910192915050565b60006101408236031215613d3357600080fd5b613d3b61369e565b613d448361325d565b8152613d526020840161371e565b6020820152604083013567ffffffffffffffff80821115613d7257600080fd5b613d7e368387016138da565b60408401526060850135915080821115613d9757600080fd5b50613da4368286016138da565b606083015250613db73660808501613749565b6080820152613dc93660e08501613749565b60a082015292915050565b815167ffffffffffffffff811115613dee57613dee613645565b613e0281613dfc8454613841565b84613a25565b602080601f831160018114613e555760008415613e1f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613a6d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613ea257888601518255948401946001909101908401613e83565b5085821015613ede57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613f12818401876132b9565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613f509050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e08301526135a0565b60a081526000613f9a60a08301876132b9565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a06020820152600061401760a08301866132b9565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b60006020828403121561405a57600080fd5b815167ffffffffffffffff81111561407157600080fd5b8201601f8101841361408257600080fd5b80516140906138f982613894565b8181528560208385010111156140a557600080fd5b6135a0826020830160208601613295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610619576106196140b6565b67ffffffffffffffff8416815260e0810161414460208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c083015261289c565b6060810161061982848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156141c957600080fd5b8151610c7981613316565b8082028115828204841417610619576106196140b6565b80820180821115610619576106196140b6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614263577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613d1681846020870161329556fe4275726e4d696e74546f6b656e506f6f6c416e6450726f787920312e352e302d646576a164736f6c6343000818000a", } var BurnMintTokenPoolAndProxyABI = BurnMintTokenPoolAndProxyMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go b/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go index 6631733928..dc1e17729b 100644 --- a/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go +++ b/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var BurnWithFromMintTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620044eb380380620044eb8339810160408190526200003491620008c0565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c2816200018f565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c05262000168576040805160008152602081019091526200016890846200023a565b5062000185925050506001600160a01b0385163060001962000397565b5050505062000afc565b336001600160a01b03821603620001e95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200025b576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002e65760008382815181106200027f576200027f620009d0565b60209081029190910101519050620002996002826200047d565b15620002dc576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200025e565b5060005b8151811015620003925760008282815181106200030b576200030b620009d0565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000337575062000389565b620003446002826200049d565b1562000387576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002ea565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620009e6565b6200041b919062000a16565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200047791869190620004b416565b50505050565b600062000494836001600160a01b03841662000585565b90505b92915050565b600062000494836001600160a01b03841662000689565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000503906001600160a01b038516908490620006db565b80519091501562000392578080602001905181019062000524919062000a2c565b620003925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b600081815260018301602052604081205480156200067e576000620005ac60018362000a57565b8554909150600090620005c29060019062000a57565b90508181146200062e576000866000018281548110620005e657620005e6620009d0565b90600052602060002001549050808760000184815481106200060c576200060c620009d0565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000642576200064262000a6d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000497565b600091505062000497565b6000818152600183016020526040812054620006d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000497565b50600062000497565b6060620006ec8484600085620006f4565b949350505050565b606082471015620007575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b0316858760405162000775919062000aa9565b60006040518083038185875af1925050503d8060008114620007b4576040519150601f19603f3d011682016040523d82523d6000602084013e620007b9565b606091505b509092509050620007cd87838387620007d8565b979650505050505050565b606083156200084c57825160000362000844576001600160a01b0385163b620008445760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620006ec565b620006ec8383815115620008635781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000ac7565b6001600160a01b03811681146200089557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008bb816200087f565b919050565b60008060008060808587031215620008d757600080fd5b8451620008e4816200087f565b602086810151919550906001600160401b03808211156200090457600080fd5b818801915088601f8301126200091957600080fd5b8151818111156200092e576200092e62000898565b8060051b604051601f19603f8301168101818110858211171562000956576200095662000898565b60405291825284820192508381018501918b8311156200097557600080fd5b938501935b828510156200099e576200098e85620008ae565b845293850193928501926200097a565b809850505050505050620009b560408601620008ae565b9150620009c560608601620008ae565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000497576200049762000a00565b60006020828403121562000a3f57600080fd5b8151801515811462000a5057600080fd5b9392505050565b8181038181111562000497576200049762000a00565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aa057818101518382015260200162000a86565b50506000910152565b6000825162000abd81846020870162000a83565b9190910192915050565b602081526000825180602084015262000ae881604085016020870162000a83565b601f01601f19169190910160400192915050565b60805160a05160c05161397262000b79600039600081816104a90152818161173401526121180152600081816104830152818161156501526119ea0152600081816102050152818161025a015281816106e9015281816114850152818161190a01528181611b02015281816120ae015261230301526139726000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc1461046e578063dc0bd97114610481578063e0351e13146104a7578063f2fde38b146104cd57600080fd5b8063c4bffe2b14610433578063c75eea9c14610448578063cf7401f31461045b57600080fd5b8063b0f479a1116100c8578063b0f479a1146103ef578063b79465801461040d578063c0d786551461042057600080fd5b80639a4575b91461034b578063a7cd63b71461036b578063af58d59f1461038057600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146102ff5780637d54534e146103075780638926f54f1461031a5780638da5cb5b1461032d57600080fd5b806354c8a4f3146102b95780636d3d1a58146102ce57806378a010b2146102ec57600080fd5b806321df0da71161018c57806321df0da714610203578063240028e81461024a578063390775371461029757600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612aa6565b6104e0565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612b05565b6105c5565b6040516101d29190612b84565b6101ee610675565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c6610258366004612bc4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102aa6102a5366004612be1565b610691565b604051905181526020016101d2565b6102cc6102c7366004612c69565b6107ec565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610225565b6102cc6102fa366004612cd5565b610867565b6102cc6109db565b6102cc610315366004612bc4565b610ad8565b6101c6610328366004612b05565b610b27565b60005473ffffffffffffffffffffffffffffffffffffffff16610225565b61035e610359366004612d58565b610b3e565b6040516101d29190612d93565b610373610be5565b6040516101d29190612df3565b61039361038e366004612b05565b610bf6565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610225565b6101ee61041b366004612b05565b610ccb565b6102cc61042e366004612bc4565b610cf6565b61043b610dd1565b6040516101d29190612e4d565b610393610456366004612b05565b610e89565b6102cc610469366004612fb5565b610f5b565b6102cc61047c366004612ffa565b610fe4565b7f0000000000000000000000000000000000000000000000000000000000000000610225565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b6102cc6104db366004612bc4565b61146a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061057357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906105f09061303c565b80601f016020809104026020016040519081016040528092919081815260200182805461061c9061303c565b80156106695780601f1061063e57610100808354040283529160200191610669565b820191906000526020600020905b81548152906001019060200180831161064c57829003601f168201915b50505050509050919050565b6040518060600160405280602381526020016139436023913981565b6040805160208101909152600081526106b16106ac8361313a565b61147e565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b5061076b925050506060830160408401612bc4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f084606001356040516107cd91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6107f46116af565b6108618484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061173292505050565b50505050565b61086f6116af565b61087883610b27565b6108bf576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546108e69061303c565b80601f01602080910402602001604051908101604052809291908181526020018280546109129061303c565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505067ffffffffffffffff861660009081526007602052604090209192505060040161098e83858361327f565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf8285856040516109cd93929190613399565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016108b6565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ae06116af565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105bf600567ffffffffffffffff84166118e8565b6040805180820190915260608082526020820152610b63610b5e836133fd565b611903565b610b708260600135611acd565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610bca84602001602081019061041b9190612b05565b81526040805160208181019092526000815291015292915050565b6060610bf16002611b76565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105bf90611b83565b67ffffffffffffffff811660009081526007602052604090206005018054606091906105f09061303c565b610cfe6116af565b73ffffffffffffffffffffffffffffffffffffffff8116610d4b576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610ddf6005611b76565b90506000815167ffffffffffffffff811115610dfd57610dfd612e8f565b604051908082528060200260200182016040528015610e26578160200160208202803683370190505b50905060005b8251811015610e8257828181518110610e4757610e4761349f565b6020026020010151828281518110610e6157610e6161349f565b67ffffffffffffffff90921660209283029190910190910152600101610e2c565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105bf90611b83565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590610f9b575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610fd4576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016108b6565b610fdf838383611c35565b505050565b610fec6116af565b60005b81811015610fdf57600083838381811061100b5761100b61349f565b905060200281019061101d91906134ce565b6110269061350c565b905061103b8160800151826020015115611d1f565b61104e8160a00151826020015115611d1f565b80602001511561134a5780516110709060059067ffffffffffffffff16611e58565b6110b55780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108b6565b60408101515115806110ca5750606081015151155b15611101576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906112e290826135c0565b50606082015160058201906112f790826135c0565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061133d94939291906136da565b60405180910390a1611461565b80516113629060059067ffffffffffffffff16611e64565b6113a75780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016108b6565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114106004830182612a58565b61141e600583016000612a58565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101610fef565b6114726116af565b61147b81611e70565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146115135760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108b6565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190613773565b1561161c576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116298160200151611f65565b600061163882602001516105c5565b905080516000148061165c575080805190602001208260a001518051906020012014155b15611699578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016108b69190612b84565b6116ab8260200151836060015161208b565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016108b6565b565b7f0000000000000000000000000000000000000000000000000000000000000000611789576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561181f5760008382815181106117a9576117a961349f565b602002602001015190506117c78160026120d290919063ffffffff16565b156118165760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010161178c565b5060005b8151811015610fdf5760008282815181106118405761184061349f565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361188457506118e0565b61188f6002826120f4565b156118de5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611823565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146119985760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016108b6565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190613773565b15611aa1576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aae8160400151612116565b611abb8160200151612195565b61147b816020015182606001516122e3565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639dc29fac90604401600060405180830381600087803b158015611b5b57600080fd5b505af1158015611b6f573d6000803e3d6000fd5b5050505050565b606060006118fc83612327565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611c1182606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611bf591906137bf565b85608001516fffffffffffffffffffffffffffffffff16612382565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611c3e83610b27565b611c80576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016108b6565b611c8b826000611d1f565b67ffffffffffffffff83166000908152600760205260409020611cae90836123ac565b611cb9816000611d1f565b67ffffffffffffffff83166000908152600760205260409020611cdf90600201826123ac565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611d12939291906137d2565b60405180910390a1505050565b815115611de65781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611d75575060408201516fffffffffffffffffffffffffffffffff16155b15611dae57816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016108b69190613855565b80156116ab576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611e1f575060208201516fffffffffffffffffffffffffffffffff1615155b156116ab57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016108b69190613855565b60006118fc838361254e565b60006118fc838361259d565b3373ffffffffffffffffffffffffffffffffffffffff821603611eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016108b6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b611f6e81610b27565b611fb0576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108b6565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa15801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190613773565b61147b576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108b6565b67ffffffffffffffff821660009081526007602052604090206116ab90600201827f0000000000000000000000000000000000000000000000000000000000000000612690565b60006118fc8373ffffffffffffffffffffffffffffffffffffffff841661259d565b60006118fc8373ffffffffffffffffffffffffffffffffffffffff841661254e565b7f00000000000000000000000000000000000000000000000000000000000000001561147b57612147600282612a13565b61147b576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016108b6565b61219e81610b27565b6121e0576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108b6565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227d9190613891565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461147b576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016108b6565b67ffffffffffffffff821660009081526007602052604090206116ab90827f0000000000000000000000000000000000000000000000000000000000000000612690565b60608160000180548060200260200160405190810160405280929190818152602001828054801561066957602002820191906000526020600020905b8154815260200190600101908083116123635750505050509050919050565b60006123a18561239284866138ae565b61239c90876138c5565b612a42565b90505b949350505050565b81546000906123d590700100000000000000000000000000000000900463ffffffff16426137bf565b90508015612477576001830154835461241d916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612382565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461249d916fffffffffffffffffffffffffffffffff9081169116612a42565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611d12908490613855565b6000818152600183016020526040812054612595575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105bf565b5060006105bf565b600081815260018301602052604081205480156126865760006125c16001836137bf565b85549091506000906125d5906001906137bf565b905081811461263a5760008660000182815481106125f5576125f561349f565b90600052602060002001549050808760000184815481106126185761261861349f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061264b5761264b6138d8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105bf565b60009150506105bf565b825474010000000000000000000000000000000000000000900460ff1615806126b7575081155b156126c157505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061270790700100000000000000000000000000000000900463ffffffff16426137bf565b905080156127c75781831115612749576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546127839083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612382565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561287e5773ffffffffffffffffffffffffffffffffffffffff8416612826576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016108b6565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016108b6565b848310156129915760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906128c290826137bf565b6128cc878a6137bf565b6128d691906138c5565b6128e09190613907565b905073ffffffffffffffffffffffffffffffffffffffff8616612939576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016108b6565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016108b6565b61299b85846137bf565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156118fc565b6000818310612a5157816118fc565b5090919050565b508054612a649061303c565b6000825580601f10612a74575050565b601f01602090049060005260206000209081019061147b91905b80821115612aa25760008155600101612a8e565b5090565b600060208284031215612ab857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146118fc57600080fd5b803567ffffffffffffffff81168114612b0057600080fd5b919050565b600060208284031215612b1757600080fd5b6118fc82612ae8565b6000815180845260005b81811015612b4657602081850181015186830182015201612b2a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006118fc6020830184612b20565b73ffffffffffffffffffffffffffffffffffffffff8116811461147b57600080fd5b8035612b0081612b97565b600060208284031215612bd657600080fd5b81356118fc81612b97565b600060208284031215612bf357600080fd5b813567ffffffffffffffff811115612c0a57600080fd5b820161010081850312156118fc57600080fd5b60008083601f840112612c2f57600080fd5b50813567ffffffffffffffff811115612c4757600080fd5b6020830191508360208260051b8501011115612c6257600080fd5b9250929050565b60008060008060408587031215612c7f57600080fd5b843567ffffffffffffffff80821115612c9757600080fd5b612ca388838901612c1d565b90965094506020870135915080821115612cbc57600080fd5b50612cc987828801612c1d565b95989497509550505050565b600080600060408486031215612cea57600080fd5b612cf384612ae8565b9250602084013567ffffffffffffffff80821115612d1057600080fd5b818601915086601f830112612d2457600080fd5b813581811115612d3357600080fd5b876020828501011115612d4557600080fd5b6020830194508093505050509250925092565b600060208284031215612d6a57600080fd5b813567ffffffffffffffff811115612d8157600080fd5b820160a081850312156118fc57600080fd5b602081526000825160406020840152612daf6060840182612b20565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612dea8282612b20565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e4157835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612e0f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e4157835167ffffffffffffffff1683529284019291840191600101612e69565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612ee257612ee2612e8f565b60405290565b60405160c0810167ffffffffffffffff81118282101715612ee257612ee2612e8f565b801515811461147b57600080fd5b8035612b0081612f0b565b80356fffffffffffffffffffffffffffffffff81168114612b0057600080fd5b600060608284031215612f5657600080fd5b6040516060810181811067ffffffffffffffff82111715612f7957612f79612e8f565b6040529050808235612f8a81612f0b565b8152612f9860208401612f24565b6020820152612fa960408401612f24565b60408201525092915050565b600080600060e08486031215612fca57600080fd5b612fd384612ae8565b9250612fe28560208601612f44565b9150612ff18560808601612f44565b90509250925092565b6000806020838503121561300d57600080fd5b823567ffffffffffffffff81111561302457600080fd5b61303085828601612c1d565b90969095509350505050565b600181811c9082168061305057607f821691505b602082108103613089577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126130a057600080fd5b813567ffffffffffffffff808211156130bb576130bb612e8f565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561310157613101612e8f565b8160405283815286602085880101111561311a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561314d57600080fd5b613155612ebe565b823567ffffffffffffffff8082111561316d57600080fd5b6131793683870161308f565b835261318760208601612ae8565b602084015261319860408601612bb9565b6040840152606085013560608401526131b360808601612bb9565b608084015260a08501359150808211156131cc57600080fd5b6131d83683870161308f565b60a084015260c08501359150808211156131f157600080fd5b6131fd3683870161308f565b60c084015260e085013591508082111561321657600080fd5b506132233682860161308f565b60e08301525092915050565b601f821115610fdf576000816000526020600020601f850160051c810160208610156132585750805b601f850160051c820191505b8181101561327757828155600101613264565b505050505050565b67ffffffffffffffff83111561329757613297612e8f565b6132ab836132a5835461303c565b8361322f565b6000601f8411600181146132fd57600085156132c75750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611b6f565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561334c578685013582556020948501946001909201910161332c565b5086821015613387577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006133ac6040830186612b20565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a0823603121561340f57600080fd5b60405160a0810167ffffffffffffffff828210818311171561343357613433612e8f565b81604052843591508082111561344857600080fd5b506134553682860161308f565b82525061346460208401612ae8565b6020820152604083013561347781612b97565b604082015260608381013590820152608083013561349481612b97565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261350257600080fd5b9190910192915050565b6000610140823603121561351f57600080fd5b613527612ee8565b61353083612ae8565b815261353e60208401612f19565b6020820152604083013567ffffffffffffffff8082111561355e57600080fd5b61356a3683870161308f565b6040840152606085013591508082111561358357600080fd5b506135903682860161308f565b6060830152506135a33660808501612f44565b60808201526135b53660e08501612f44565b60a082015292915050565b815167ffffffffffffffff8111156135da576135da612e8f565b6135ee816135e8845461303c565b8461322f565b602080601f831160018114613641576000841561360b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613277565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561368e5788860151825594840194600190910190840161366f565b50858210156136ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526136fe81840187612b20565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff908116606087015290870151166080850152915061373c9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612dea565b60006020828403121561378557600080fd5b81516118fc81612f0b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105bf576105bf613790565b67ffffffffffffffff8416815260e0810161381e60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c08301526123a4565b606081016105bf82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156138a357600080fd5b81516118fc81612b97565b80820281158282048414176105bf576105bf613790565b808201808211156105bf576105bf613790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008261393d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4275726e5769746846726f6d4d696e74546f6b656e506f6f6c20312e352e302d646576a164736f6c6343000818000a", + Bin: "0x60e06040523480156200001157600080fd5b50604051620045ac380380620045ac8339810160408190526200003491620008c0565b8383838333806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c2816200018f565b5050506001600160a01b0384161580620000e357506001600160a01b038116155b80620000f657506001600160a01b038216155b1562000115576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c05262000168576040805160008152602081019091526200016890846200023a565b5062000185925050506001600160a01b0385163060001962000397565b5050505062000afc565b336001600160a01b03821603620001e95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200025b576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002e65760008382815181106200027f576200027f620009d0565b60209081029190910101519050620002996002826200047d565b15620002dc576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200025e565b5060005b8151811015620003925760008282815181106200030b576200030b620009d0565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000337575062000389565b620003446002826200049d565b1562000387576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002ea565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620009e6565b6200041b919062000a16565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200047791869190620004b416565b50505050565b600062000494836001600160a01b03841662000585565b90505b92915050565b600062000494836001600160a01b03841662000689565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000503906001600160a01b038516908490620006db565b80519091501562000392578080602001905181019062000524919062000a2c565b620003925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b600081815260018301602052604081205480156200067e576000620005ac60018362000a57565b8554909150600090620005c29060019062000a57565b90508181146200062e576000866000018281548110620005e657620005e6620009d0565b90600052602060002001549050808760000184815481106200060c576200060c620009d0565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000642576200064262000a6d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000497565b600091505062000497565b6000818152600183016020526040812054620006d25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000497565b50600062000497565b6060620006ec8484600085620006f4565b949350505050565b606082471015620007575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b0316858760405162000775919062000aa9565b60006040518083038185875af1925050503d8060008114620007b4576040519150601f19603f3d011682016040523d82523d6000602084013e620007b9565b606091505b509092509050620007cd87838387620007d8565b979650505050505050565b606083156200084c57825160000362000844576001600160a01b0385163b620008445760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b5081620006ec565b620006ec8383815115620008635781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000ac7565b6001600160a01b03811681146200089557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008bb816200087f565b919050565b60008060008060808587031215620008d757600080fd5b8451620008e4816200087f565b602086810151919550906001600160401b03808211156200090457600080fd5b818801915088601f8301126200091957600080fd5b8151818111156200092e576200092e62000898565b8060051b604051601f19603f8301168101818110858211171562000956576200095662000898565b60405291825284820192508381018501918b8311156200097557600080fd5b938501935b828510156200099e576200098e85620008ae565b845293850193928501926200097a565b809850505050505050620009b560408601620008ae565b9150620009c560608601620008ae565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000497576200049762000a00565b60006020828403121562000a3f57600080fd5b8151801515811462000a5057600080fd5b9392505050565b8181038181111562000497576200049762000a00565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aa057818101518382015260200162000a86565b50506000910152565b6000825162000abd81846020870162000a83565b9190910192915050565b602081526000825180602084015262000ae881604085016020870162000a83565b601f01601f19169190910160400192915050565b60805160a05160c051613a2c62000b80600039600081816104a9015281816117ee01526121d20152600081816104830152818161161f0152611aa40152600081816102050152818161025a015281816106e9015281816107900152818161153f015281816119c401528181611bbc0152818161216801526123bd0152613a2c6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639a4575b9116100ee578063c4bffe2b11610097578063db6327dc11610071578063db6327dc1461046e578063dc0bd97114610481578063e0351e13146104a7578063f2fde38b146104cd57600080fd5b8063c4bffe2b14610433578063c75eea9c14610448578063cf7401f31461045b57600080fd5b8063b0f479a1116100c8578063b0f479a1146103ef578063b79465801461040d578063c0d786551461042057600080fd5b80639a4575b91461034b578063a7cd63b71461036b578063af58d59f1461038057600080fd5b806354c8a4f31161015b57806379ba50971161013557806379ba5097146102ff5780637d54534e146103075780638926f54f1461031a5780638da5cb5b1461032d57600080fd5b806354c8a4f3146102b95780636d3d1a58146102ce57806378a010b2146102ec57600080fd5b806321df0da71161018c57806321df0da714610203578063240028e81461024a578063390775371461029757600080fd5b806301ffc9a7146101b35780630a2fd493146101db578063181f5a77146101fb575b600080fd5b6101c66101c1366004612b60565b6104e0565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612bbf565b6105c5565b6040516101d29190612c3e565b6101ee610675565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101c6610258366004612c7e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102aa6102a5366004612c9b565b610691565b604051905181526020016101d2565b6102cc6102c7366004612d23565b6108a6565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610225565b6102cc6102fa366004612d8f565b610921565b6102cc610a95565b6102cc610315366004612c7e565b610b92565b6101c6610328366004612bbf565b610be1565b60005473ffffffffffffffffffffffffffffffffffffffff16610225565b61035e610359366004612e12565b610bf8565b6040516101d29190612e4d565b610373610c9f565b6040516101d29190612ead565b61039361038e366004612bbf565b610cb0565b6040516101d2919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610225565b6101ee61041b366004612bbf565b610d85565b6102cc61042e366004612c7e565b610db0565b61043b610e8b565b6040516101d29190612f07565b610393610456366004612bbf565b610f43565b6102cc61046936600461306f565b611015565b6102cc61047c3660046130b4565b61109e565b7f0000000000000000000000000000000000000000000000000000000000000000610225565b7f00000000000000000000000000000000000000000000000000000000000000006101c6565b6102cc6104db366004612c7e565b611524565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061057357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906105f0906130f6565b80601f016020809104026020016040519081016040528092919081815260200182805461061c906130f6565b80156106695780601f1061063e57610100808354040283529160200191610669565b820191906000526020600020905b81548152906001019060200180831161064c57829003601f168201915b50505050509050919050565b6040518060600160405280602381526020016139fd6023913981565b6040805160208101909152600081526106b16106ac836131f4565b611538565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b50506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152336004820152606085013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063095ea7b391506044016020604051808303816000875af11580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906132e9565b506108256060830160408401612c7e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161088791815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108ae611769565b61091b848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506117ec92505050565b50505050565b610929611769565b61093283610be1565b610979576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109a0906130f6565b80601f01602080910402602001604051908101604052809291908181526020018280546109cc906130f6565b8015610a195780601f106109ee57610100808354040283529160200191610a19565b820191906000526020600020905b8154815290600101906020018083116109fc57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a48838583613356565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a8793929190613470565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610970565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b9a611769565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105bf600567ffffffffffffffff84166119a2565b6040805180820190915260608082526020820152610c1d610c18836134d4565b6119bd565b610c2a8260600135611b87565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610c8484602001602081019061041b9190612bbf565b81526040805160208181019092526000815291015292915050565b6060610cab6002611c30565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105bf90611c3d565b67ffffffffffffffff811660009081526007602052604090206005018054606091906105f0906130f6565b610db8611769565b73ffffffffffffffffffffffffffffffffffffffff8116610e05576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610e996005611c30565b90506000815167ffffffffffffffff811115610eb757610eb7612f49565b604051908082528060200260200182016040528015610ee0578160200160208202803683370190505b50905060005b8251811015610f3c57828181518110610f0157610f01613576565b6020026020010151828281518110610f1b57610f1b613576565b67ffffffffffffffff90921660209283029190910190910152600101610ee6565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105bf90611c3d565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611055575060005473ffffffffffffffffffffffffffffffffffffffff163314155b1561108e576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610970565b611099838383611cef565b505050565b6110a6611769565b60005b818110156110995760008383838181106110c5576110c5613576565b90506020028101906110d791906135a5565b6110e0906135e3565b90506110f58160800151826020015115611dd9565b6111088160a00151826020015115611dd9565b80602001511561140457805161112a9060059067ffffffffffffffff16611f12565b61116f5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610970565b60408101515115806111845750606081015151155b156111bb576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061139c9082613697565b50606082015160058201906113b19082613697565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506113f794939291906137b1565b60405180910390a161151b565b805161141c9060059067ffffffffffffffff16611f1e565b6114615780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610970565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906114ca6004830182612b12565b6114d8600583016000612b12565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016110a9565b61152c611769565b61153581611f2a565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146115cd5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610970565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f91906132e9565b156116d6576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3816020015161201f565b60006116f282602001516105c5565b9050805160001480611716575080805190602001208260a001518051906020012014155b15611753578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109709190612c3e565b61176582602001518360600151612145565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610970565b565b7f0000000000000000000000000000000000000000000000000000000000000000611843576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156118d957600083828151811061186357611863613576565b6020026020010151905061188181600261218c90919063ffffffff16565b156118d05760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611846565b5060005b81518110156110995760008282815181106118fa576118fa613576565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361193e575061199a565b6119496002826121ae565b156119985760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b6001016118dd565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611a525760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610970565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2491906132e9565b15611b5b576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b6881604001516121d0565b611b75816020015161224f565b6115358160200151826060015161239d565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639dc29fac90604401600060405180830381600087803b158015611c1557600080fd5b505af1158015611c29573d6000803e3d6000fd5b5050505050565b606060006119b6836123e1565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611ccb82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611caf9190613879565b85608001516fffffffffffffffffffffffffffffffff1661243c565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b611cf883610be1565b611d3a576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610970565b611d45826000611dd9565b67ffffffffffffffff83166000908152600760205260409020611d689083612466565b611d73816000611dd9565b67ffffffffffffffff83166000908152600760205260409020611d999060020182612466565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611dcc9392919061388c565b60405180910390a1505050565b815115611ea05781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611e2f575060408201516fffffffffffffffffffffffffffffffff16155b15611e6857816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610970919061390f565b8015611765576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580611ed9575060208201516fffffffffffffffffffffffffffffffff1615155b1561176557816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610970919061390f565b60006119b68383612608565b60006119b68383612657565b3373ffffffffffffffffffffffffffffffffffffffff821603611fa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610970565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61202881610be1565b61206a576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610970565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d91906132e9565b611535576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610970565b67ffffffffffffffff8216600090815260076020526040902061176590600201827f000000000000000000000000000000000000000000000000000000000000000061274a565b60006119b68373ffffffffffffffffffffffffffffffffffffffff8416612657565b60006119b68373ffffffffffffffffffffffffffffffffffffffff8416612608565b7f00000000000000000000000000000000000000000000000000000000000000001561153557612201600282612acd565b611535576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610970565b61225881610be1565b61229a576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610970565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612337919061394b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611535576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610970565b67ffffffffffffffff8216600090815260076020526040902061176590827f000000000000000000000000000000000000000000000000000000000000000061274a565b60608160000180548060200260200160405190810160405280929190818152602001828054801561066957602002820191906000526020600020905b81548152602001906001019080831161241d5750505050509050919050565b600061245b8561244c8486613968565b612456908761397f565b612afc565b90505b949350505050565b815460009061248f90700100000000000000000000000000000000900463ffffffff1642613879565b9050801561253157600183015483546124d7916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661243c565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612557916fffffffffffffffffffffffffffffffff9081169116612afc565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611dcc90849061390f565b600081815260018301602052604081205461264f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105bf565b5060006105bf565b6000818152600183016020526040812054801561274057600061267b600183613879565b855490915060009061268f90600190613879565b90508181146126f45760008660000182815481106126af576126af613576565b90600052602060002001549050808760000184815481106126d2576126d2613576565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061270557612705613992565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105bf565b60009150506105bf565b825474010000000000000000000000000000000000000000900460ff161580612771575081155b1561277b57505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906127c190700100000000000000000000000000000000900463ffffffff1642613879565b905080156128815781831115612803576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461283d9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661243c565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156129385773ffffffffffffffffffffffffffffffffffffffff84166128e0576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610970565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610970565b84831015612a4b5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061297c9082613879565b612986878a613879565b612990919061397f565b61299a91906139c1565b905073ffffffffffffffffffffffffffffffffffffffff86166129f3576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610970565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610970565b612a558584613879565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156119b6565b6000818310612b0b57816119b6565b5090919050565b508054612b1e906130f6565b6000825580601f10612b2e575050565b601f01602090049060005260206000209081019061153591905b80821115612b5c5760008155600101612b48565b5090565b600060208284031215612b7257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119b657600080fd5b803567ffffffffffffffff81168114612bba57600080fd5b919050565b600060208284031215612bd157600080fd5b6119b682612ba2565b6000815180845260005b81811015612c0057602081850181015186830182015201612be4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006119b66020830184612bda565b73ffffffffffffffffffffffffffffffffffffffff8116811461153557600080fd5b8035612bba81612c51565b600060208284031215612c9057600080fd5b81356119b681612c51565b600060208284031215612cad57600080fd5b813567ffffffffffffffff811115612cc457600080fd5b820161010081850312156119b657600080fd5b60008083601f840112612ce957600080fd5b50813567ffffffffffffffff811115612d0157600080fd5b6020830191508360208260051b8501011115612d1c57600080fd5b9250929050565b60008060008060408587031215612d3957600080fd5b843567ffffffffffffffff80821115612d5157600080fd5b612d5d88838901612cd7565b90965094506020870135915080821115612d7657600080fd5b50612d8387828801612cd7565b95989497509550505050565b600080600060408486031215612da457600080fd5b612dad84612ba2565b9250602084013567ffffffffffffffff80821115612dca57600080fd5b818601915086601f830112612dde57600080fd5b813581811115612ded57600080fd5b876020828501011115612dff57600080fd5b6020830194508093505050509250925092565b600060208284031215612e2457600080fd5b813567ffffffffffffffff811115612e3b57600080fd5b820160a081850312156119b657600080fd5b602081526000825160406020840152612e696060840182612bda565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612ea48282612bda565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015612efb57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612ec9565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612efb57835167ffffffffffffffff1683529284019291840191600101612f23565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612f9c57612f9c612f49565b60405290565b60405160c0810167ffffffffffffffff81118282101715612f9c57612f9c612f49565b801515811461153557600080fd5b8035612bba81612fc5565b80356fffffffffffffffffffffffffffffffff81168114612bba57600080fd5b60006060828403121561301057600080fd5b6040516060810181811067ffffffffffffffff8211171561303357613033612f49565b604052905080823561304481612fc5565b815261305260208401612fde565b602082015261306360408401612fde565b60408201525092915050565b600080600060e0848603121561308457600080fd5b61308d84612ba2565b925061309c8560208601612ffe565b91506130ab8560808601612ffe565b90509250925092565b600080602083850312156130c757600080fd5b823567ffffffffffffffff8111156130de57600080fd5b6130ea85828601612cd7565b90969095509350505050565b600181811c9082168061310a57607f821691505b602082108103613143577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261315a57600080fd5b813567ffffffffffffffff8082111561317557613175612f49565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156131bb576131bb612f49565b816040528381528660208588010111156131d457600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610100823603121561320757600080fd5b61320f612f78565b823567ffffffffffffffff8082111561322757600080fd5b61323336838701613149565b835261324160208601612ba2565b602084015261325260408601612c73565b60408401526060850135606084015261326d60808601612c73565b608084015260a085013591508082111561328657600080fd5b61329236838701613149565b60a084015260c08501359150808211156132ab57600080fd5b6132b736838701613149565b60c084015260e08501359150808211156132d057600080fd5b506132dd36828601613149565b60e08301525092915050565b6000602082840312156132fb57600080fd5b81516119b681612fc5565b601f821115611099576000816000526020600020601f850160051c8101602086101561332f5750805b601f850160051c820191505b8181101561334e5782815560010161333b565b505050505050565b67ffffffffffffffff83111561336e5761336e612f49565b6133828361337c83546130f6565b83613306565b6000601f8411600181146133d4576000851561339e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611c29565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156134235786850135825560209485019460019092019101613403565b508682101561345e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006134836040830186612bda565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a082360312156134e657600080fd5b60405160a0810167ffffffffffffffff828210818311171561350a5761350a612f49565b81604052843591508082111561351f57600080fd5b5061352c36828601613149565b82525061353b60208401612ba2565b6020820152604083013561354e81612c51565b604082015260608381013590820152608083013561356b81612c51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18336030181126135d957600080fd5b9190910192915050565b600061014082360312156135f657600080fd5b6135fe612fa2565b61360783612ba2565b815261361560208401612fd3565b6020820152604083013567ffffffffffffffff8082111561363557600080fd5b61364136838701613149565b6040840152606085013591508082111561365a57600080fd5b5061366736828601613149565b60608301525061367a3660808501612ffe565b608082015261368c3660e08501612ffe565b60a082015292915050565b815167ffffffffffffffff8111156136b1576136b1612f49565b6136c5816136bf84546130f6565b84613306565b602080601f83116001811461371857600084156136e25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561334e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561376557888601518255948401946001909101908401613746565b50858210156137a157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526137d581840187612bda565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506138139050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612ea4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105bf576105bf61384a565b67ffffffffffffffff8416815260e081016138d860208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c083015261245e565b606081016105bf82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561395d57600080fd5b81516119b681612c51565b80820281158282048414176105bf576105bf61384a565b808201808211156105bf576105bf61384a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000826139f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4275726e5769746846726f6d4d696e74546f6b656e506f6f6c20312e352e302d646576a164736f6c6343000818000a", } var BurnWithFromMintTokenPoolABI = BurnWithFromMintTokenPoolMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go index a414481a3c..2dea06bd75 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go @@ -164,7 +164,7 @@ type MultiOCR3BaseOCRConfigArgs struct { var EVM2EVMMultiOffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"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\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006bab38038062006bab8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ed562000cd6600039600081816102530152612cac0152600081816102240152612f860152600081816101f50152818161147b01526118d00152600081816101c501526128a1015260008181611e5e0152611eaa0152615ed56000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b1461059c578063f716f99f146105af578063ff888fb1146105c257600080fd5b8063d2a15d3514610556578063e9d68a8e14610569578063ece670b61461058957600080fd5b8063991a5018116100bd578063991a5018146104de578063c673e584146104f1578063ccd37ba31461051157600080fd5b806385572ffb146104b55780638da5cb5b146104c357600080fd5b80633f4b04aa1161012f5780637437ff9f116101145780637437ff9f1461038557806379ba50971461049a5780637d4eef60146104a257600080fd5b80633f4b04aa146103495780635e36480c1461036557600080fd5b8063181f5a7711610160578063181f5a77146102da5780632d04ab7614610323578063311cd5131461033657600080fd5b806304666f9c1461017c57806306285c6914610191575b600080fd5b61018f61018a366004614091565b6105e5565b005b61028360408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102d19190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103166040518060400160405280601d81526020017f45564d3245564d4d756c74694f666652616d7020312e362e302d64657600000081525081565b6040516102d19190614200565b61018f6103313660046142ab565b6105f9565b61018f61034436600461435e565b6109fd565b60095460405167ffffffffffffffff90911681526020016102d1565b6103786103733660046143b2565b610a66565b6040516102d1919061440f565b61043d6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b830481166020850152780100000000000000000000000000000000000000000000000083048116948401949094527c01000000000000000000000000000000000000000000000000000000009091049092166060820152600554909116608082015290565b6040516102d19190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610abc565b61018f6104b036600461497c565b610b7a565b61018f610177366004614aa7565b6000546040516001600160a01b0390911681526020016102d1565b61018f6104ec366004614af6565b610d1a565b6105046104ff366004614b7b565b610d2b565b6040516102d19190614bdb565b61054861051f366004614c50565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102d1565b61018f610564366004614c7a565b610e89565b61057c610577366004614cef565b610f43565b6040516102d19190614d0a565b61018f610597366004614d58565b611062565b61018f6105aa366004614dbc565b6113d2565b61018f6105bd366004614e41565b6113e3565b6105d56105d0366004614f7f565b611425565b60405190151581526020016102d1565b6105ed6114e6565b6105f681611542565b50565b60006106078789018961511d565b8051515190915015158061062057508051602001515115155b156107205760095460208a01359067ffffffffffffffff808316911610156106df576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f926106a8929101615385565b600060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b5050505061071e565b81602001515160000361071e576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b8160200151518110156109465760008260200151828151811061074857610748615288565b6020026020010151905060008160000151905061076481611884565b600061076f82611986565b602084015151815491925067ffffffffffffffff9081167501000000000000000000000000000000000000000000909204161415806107c5575060208084015190810151905167ffffffffffffffff9182169116115b1561080e57825160208401516040517feefb0cac000000000000000000000000000000000000000000000000000000008152610805929190600401615398565b60405180910390fd5b60408301518061084a576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600860209081526040808320848452909152902054156108bd5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610805565b60208085015101516108d09060016153e3565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000067ffffffffffffffff928316021790925592511660009081526008602090815260408083209483529390529190912042905550600101610723565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d81604051610976919061540b565b60405180910390a16109f260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506119ed915050565b505050505050505050565b610a3d610a0c828401846154a8565b6040805160008082526020820190925290610a37565b6060815260200190600190039081610a225790505b50611d64565b604080516000808252602082019092529050610a606001858585858660006119ed565b50505050565b6000610a74600160046154dd565b6002610a81608085615506565b67ffffffffffffffff16610a95919061552d565b610a9f8585611e14565b901c166003811115610ab357610ab36143e5565b90505b92915050565b6001546001600160a01b03163314610b165760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610805565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b82611e5b565b815181518114610bbe576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610d0a576000848281518110610bdd57610bdd615288565b60200260200101519050600081602001515190506000858481518110610c0557610c05615288565b6020026020010151905080518214610c49576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610cfb576000828281518110610c6857610c68615288565b6020026020010151905080600014610cf25784602001518281518110610c9057610c90615288565b602002602001015160800151811015610cf25784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024810183905260448101829052606401610805565b50600101610c4c565b50505050806001019050610bc1565b50610d158383611d64565b505050565b610d226114e6565b6105f681611edc565b610d6e6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610e1757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610df9575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e7957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e5b575b5050505050815250509050919050565b610e916114e6565b60005b81811015610d15576000838383818110610eb057610eb0615288565b905060400201803603810190610ec69190615544565b9050610ed58160200151611425565b610f3a57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101610e94565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff161515938601939093527501000000000000000000000000000000000000000000909204909216948301949094526001840180549394929391840191610fe29061557d565b80601f016020809104026020016040519081016040528092919081815260200182805461100e9061557d565b8015610e795780601f1061103057610100808354040283529160200191610e79565b820191906000526020600020905b81548152906001019060200180831161103e57505050919092525091949350505050565b33301461109b576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600080825260208201909252816110d8565b60408051808201909152600080825260208201528152602001906001900390816110b15790505b5060a0840151519091501561110b576111088360a001518460200151856060015186600001516020015186612089565b90505b6040805160a0810182528451518152845160209081015167ffffffffffffffff1681830152808601518351600094840192611147929101614200565b60408051601f19818403018152918152908252868101516020830152018390526005549091506001600160a01b03168015611254576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a1906111c1908590600401615659565b600060405180830381600087803b1580156111db57600080fd5b505af19250505080156111ec575060015b611254573d80801561121a576040519150601f19603f3d011682016040523d82523d6000602084013e61121f565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016108059190614200565b60408501515115801561126957506080850151155b80611280575060608501516001600160a01b03163b155b806112c0575060608501516112be906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612167565b155b156112cc575050505050565b845160209081015167ffffffffffffffff16600090815260069091526040808220546080880151606089015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf9798392611344928992611388929160040161566c565b6000604051808303816000875af1158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138b91908101906156a8565b5091509150816113c957806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016108059190614200565b50505050505050565b6113da6114e6565b6105f681612183565b6113eb6114e6565b60005b81518110156114215761141982828151811061140c5761140c615288565b6020026020010151612239565b6001016113ee565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa1580156114c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab6919061573e565b6000546001600160a01b031633146115405760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610805565b565b60005b815181101561142157600082828151811061156257611562615288565b602002602001015190506000816020015190508067ffffffffffffffff166000036115b9576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b03166115fa576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916116259061557d565b80601f01602080910402602001604051908101604052809291908181526020018280546116519061557d565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905060008460600151905081516000036117815780516000036116f2576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001830161170082826157a3565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117d4565b80805190602001208280519060200120146117d4576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610805565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9061186c908690615863565b60405180910390a25050505050806001019050611545565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561191f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611943919061573e565b156105f6576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610805565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610ab6576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610805565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611a4c8760a4615931565b9050826060015115611a94578451611a6590602061552d565b8651611a7290602061552d565b611a7d9060a0615931565b611a879190615931565b611a919082615931565b90505b368114611ad6576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610805565b5081518114611b1e5781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610805565b611b26611e5b565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611b7457611b746143e5565b6002811115611b8557611b856143e5565b9052509050600281602001516002811115611ba257611ba26143e5565b148015611bf65750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611bde57611bde615288565b6000918252602090912001546001600160a01b031633145b611c2c576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611d0e576020820151611c47906001615944565b60ff16855114611c83576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611cbe576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611cd092919061595d565b604051908190038120611ce7918b9060200161596d565b604051602081830303815290604052805190602001209050611d0c8a8288888861257d565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611d9e576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611e0d57611e05858281518110611dd357611dd3615288565b602002602001015184611dff57858381518110611df257611df2615288565b6020026020010151612794565b83612794565b600101611db5565b5050505050565b67ffffffffffffffff8216600090815260076020526040812081611e39608085615981565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f000000000000000000000000000000000000000000000000000000000000000014611540576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610805565b80516001600160a01b0316611f1d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16939093177c010000000000000000000000000000000000000000000000000000000093871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060855167ffffffffffffffff8111156120a5576120a5613ea8565b6040519080825280602002602001820160405280156120ea57816020015b60408051808201909152600080825260208201528152602001906001900390816120c35790505b50905060005b865181101561215d5761213887828151811061210e5761210e615288565b602002602001015187878787868151811061212b5761212b615288565b6020026020010151612f25565b82828151811061214a5761214a615288565b60209081029190910101526001016120f0565b5095945050505050565b600061217283613334565b8015610ab35750610ab38383613398565b336001600160a01b038216036121db5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610805565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612264576000604051631b3fab5160e11b815260040161080591906159a8565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036122d157606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612326565b6060840151600182015460ff6201000090910416151590151514612326576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610805565b60a08401518051601f60ff82161115612355576001604051631b3fab5160e11b815260040161080591906159a8565b6123bb85856003018054806020026020016040519081016040528092919081815260200182805480156123b157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612393575b5050505050613467565b8560600151156124ea5761242985856002018054806020026020016040519081016040528092919081815260200182805480156123b1576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612393575050505050613467565b608086015180516124439060028701906020840190613e02565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f10156124a3576002604051631b3fab5160e11b815260040161080591906159a8565b60408801516124b39060036159c2565b60ff168160ff16116124db576003604051631b3fab5160e11b815260040161080591906159a8565b6124e7878360016134d0565b50505b6124f6858360026134d0565b815161250b9060038601906020850190613e02565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793612564938a939260028b019291906159de565b60405180910390a161257585613650565b505050505050565b612585613e74565b835160005b8181101561278a5760006001888684602081106125a9576125a9615288565b6125b691901a601b615944565b8985815181106125c8576125c8615288565b60200260200101518986815181106125e2576125e2615288565b602002602001015160405160008152602001604052604051612620949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612642573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156126a3576126a36143e5565b60028111156126b4576126b46143e5565b90525090506001816020015160028111156126d1576126d16143e5565b14612708576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f811061271f5761271f615288565b60200201511561275b576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f811061277657612776615288565b91151560209092020152505060010161258a565b5050505050505050565b815161279f81611884565b60006127aa82611986565b60208501515190915060008190036127ed576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015151811461282b576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561284657612846613ea8565b60405190808252806020026020018201604052801561286f578160200160208202803683370190505b50905060005b828110156129e45760008760200151828151811061289557612895615288565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461292857805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610805565b6129be8186600101805461293b9061557d565b80601f01602080910402602001604051908101604052809291908181526020018280546129679061557d565b80156129b45780601f10612989576101008083540402835291602001916129b4565b820191906000526020600020905b81548152906001019060200180831161299757829003601f168201915b505050505061366c565b8383815181106129d0576129d0615288565b602090810291909101015250600101612875565b5060006129fb858389606001518a6080015161378e565b905080600003612a43576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610805565b8551151560005b848110156109f257600089602001518281518110612a6a57612a6a615288565b602002602001015190506000612a8889836000015160600151610a66565b90506000816003811115612a9e57612a9e6143e5565b1480612abb57506003816003811115612ab957612ab96143e5565b145b612b12578151606001516040805167ffffffffffffffff808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a15050612f1d565b8315612be257600454600090600160a01b900463ffffffff16612b3587426154dd565b1190508080612b5557506003826003811115612b5357612b536143e5565b145b612b97576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b166004820152602401610805565b8a8481518110612ba957612ba9615288565b6020026020010151600014612bdc578a8481518110612bca57612bca615288565b60200260200101518360800181815250505b50612c43565b6000816003811115612bf657612bf66143e5565b14612c43578151606001516040805167ffffffffffffffff808d16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612b03565b81516080015167ffffffffffffffff1615612d31576000816003811115612c6c57612c6c6143e5565b03612d315781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ce3928e929190600401615a90565b6020604051808303816000875af1158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d26919061573e565b612d31575050612f1d565b60008b604001518481518110612d4957612d49615288565b6020026020010151905080518360a001515114612dad578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808d1660048301529091166024820152604401610805565b612dc18a84600001516060015160016137e4565b600080612dce858461388c565b91509150612de58c866000015160600151846137e4565b8615612e55576003826003811115612dff57612dff6143e5565b03612e55576000846003811115612e1857612e186143e5565b14612e55578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261080591908390600401615abd565b6002826003811115612e6957612e696143e5565b14612ec3576003826003811115612e8257612e826143e5565b14612ec3578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610805918e918590600401615ad6565b8451805160609091015160405167ffffffffffffffff918216918f16907f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df290612f0f9087908790615afc565b60405180910390a450505050505b600101612a4a565b60408051808201909152600080825260208201526000612f488760200151613956565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190615b1c565b90506001600160a01b038116158061303957506130376001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612167565b155b1561307b576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610805565b6000806131816040518061010001604052808b81526020018967ffffffffffffffff1681526020018a6001600160a01b031681526020018c606001518152602001866001600160a01b031681526020018c6000015181526020018c604001518152602001888152506040516024016130f39190615b39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3907753700000000000000000000000000000000000000000000000000000000179052600454859063ffffffff7c01000000000000000000000000000000000000000000000000000000009091041661138860846139fc565b5091509150816131bf57806040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016108059190614200565b80516020146132075780516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610805565b60008180602001905181019061321d9190615c06565b6040516001600160a01b038b166024820152604481018290529091506132ca9060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600454879063ffffffff78010000000000000000000000000000000000000000000000009091041661138860846139fc565b5090935091508261330957816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016108059190614200565b604080518082019091526001600160a01b039095168552602085015250919250505095945050505050565b6000613360827f01ffc9a700000000000000000000000000000000000000000000000000000000613398565b8015610ab65750613391827fffffffff00000000000000000000000000000000000000000000000000000000613398565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613450575060208210155b801561345c5750600081115b979650505050505050565b60005b8151811015610d155760ff83166000908152600360205260408120835190919084908490811061349c5761349c615288565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161346a565b60005b82518160ff161015610a60576000838260ff16815181106134f6576134f6615288565b6020026020010151905060006002811115613513576135136143e5565b60ff80871660009081526003602090815260408083206001600160a01b03871684529091529020546101009004166002811115613552576135526143e5565b14613573576004604051631b3fab5160e11b815260040161080591906159a8565b6001600160a01b0381166135b3576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156135d9576135d96143e5565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff191617610100836002811115613636576136366143e5565b0217905550905050508061364990615c1f565b90506134d3565b60ff81166105f6576009805467ffffffffffffffff1916905550565b8151602080820151604092830151925160009384936136b2937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c3e565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976136fb9794969395929491939101615c71565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016137329190615d68565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061379c858585613b22565b90506137a781611425565b6137b55760009150506137dc565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026137f3608085615506565b67ffffffffffffffff16613807919061552d565b905060006138158585611e14565b905081613824600160046154dd565b901b19168183600381111561383b5761383b6143e5565b67ffffffffffffffff871660009081526007602052604081209190921b9290921791829161386a608088615981565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b6906138d09087908790600401615dc8565b600060405180830381600087803b1580156138ea57600080fd5b505af19250505080156138fb575060015b61393a573d808015613929576040519150601f19603f3d011682016040523d82523d6000602084013e61392e565b606091505b5060039250905061394f565b50506040805160208101909152600081526002905b9250929050565b6000815160201461399557816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016108059190614200565b6000828060200190518101906139ab9190615c06565b90506001600160a01b038111806139c3575061040081105b15610ab657826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016108059190614200565b6000606060008361ffff1667ffffffffffffffff811115613a1f57613a1f613ea8565b6040519080825280601f01601f191660200182016040528015613a49576020820181803683370190505b509150863b613a7c577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613aaf577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613ae8577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b0b5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b63576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b7757506101018111155b613b94576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bbe576040516309bde33960e01b815260040160405180910390fd5b80600003613beb5786600081518110613bd957613bd9615288565b60200260200101519350505050613dba565b60008167ffffffffffffffff811115613c0657613c06613ea8565b604051908082528060200260200182016040528015613c2f578160200160208202803683370190505b50905060008080805b85811015613d595760006001821b8b811603613c935788851015613c7c578c5160018601958e918110613c6d57613c6d615288565b60200260200101519050613cb5565b8551600185019487918110613c6d57613c6d615288565b8b5160018401938d918110613caa57613caa615288565b602002602001015190505b600089861015613ce5578d5160018701968f918110613cd657613cd6615288565b60200260200101519050613d07565b8651600186019588918110613cfc57613cfc615288565b602002602001015190505b82851115613d28576040516309bde33960e01b815260040160405180910390fd5b613d328282613dc1565b878481518110613d4457613d44615288565b60209081029190910101525050600101613c38565b506001850382148015613d6b57508683145b8015613d7657508581145b613d93576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613da857613da8615288565b60200260200101519750505050505050505b9392505050565b6000818310613dd957613dd48284613ddf565b610ab3565b610ab383835b604080516001602082015290810183905260608101829052600090608001613770565b828054828255906000526020600020908101928215613e64579160200282015b82811115613e64578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e22565b50613e70929150613e93565b5090565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613e705760008155600101613e94565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee157613ee1613ea8565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ee157613ee1613ea8565b60405160c0810167ffffffffffffffff81118282101715613ee157613ee1613ea8565b6040805190810167ffffffffffffffff81118282101715613ee157613ee1613ea8565b6040516060810167ffffffffffffffff81118282101715613ee157613ee1613ea8565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f9c57613f9c613ea8565b604052919050565b600067ffffffffffffffff821115613fbe57613fbe613ea8565b5060051b60200190565b6001600160a01b03811681146105f657600080fd5b803567ffffffffffffffff81168114613ff557600080fd5b919050565b80151581146105f657600080fd5b8035613ff581613ffa565b600067ffffffffffffffff82111561402d5761402d613ea8565b50601f01601f191660200190565b600082601f83011261404c57600080fd5b813561405f61405a82614013565b613f73565b81815284602083860101111561407457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156140a457600080fd5b823567ffffffffffffffff808211156140bc57600080fd5b818501915085601f8301126140d057600080fd5b81356140de61405a82613fa4565b81815260059190911b830184019084810190888311156140fd57600080fd5b8585015b838110156141a3578035858111156141195760008081fd5b86016080818c03601f19018113156141315760008081fd5b614139613ebe565b8983013561414681613fc8565b81526040614155848201613fdd565b8b83015260608085013561416881613ffa565b8383015292840135928984111561418157600091508182fd5b61418f8f8d8688010161403b565b908301525085525050918601918601614101565b5098975050505050505050565b60005b838110156141cb5781810151838201526020016141b3565b50506000910152565b600081518084526141ec8160208601602086016141b0565b601f01601f19169290920160200192915050565b602081526000610ab360208301846141d4565b8060608101831015610ab657600080fd5b60008083601f84011261423657600080fd5b50813567ffffffffffffffff81111561424e57600080fd5b60208301915083602082850101111561394f57600080fd5b60008083601f84011261427857600080fd5b50813567ffffffffffffffff81111561429057600080fd5b6020830191508360208260051b850101111561394f57600080fd5b60008060008060008060008060e0898b0312156142c757600080fd5b6142d18a8a614213565b9750606089013567ffffffffffffffff808211156142ee57600080fd5b6142fa8c838d01614224565b909950975060808b013591508082111561431357600080fd5b61431f8c838d01614266565b909750955060a08b013591508082111561433857600080fd5b506143458b828c01614266565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561437357600080fd5b61437d8585614213565b9250606084013567ffffffffffffffff81111561439957600080fd5b6143a586828701614224565b9497909650939450505050565b600080604083850312156143c557600080fd5b6143ce83613fdd565b91506143dc60208401613fdd565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061440b5761440b6143e5565b9052565b60208101610ab682846143fb565b600060a0828403121561442f57600080fd5b614437613ee7565b90508135815261444960208301613fdd565b602082015261445a60408301613fdd565b604082015261446b60608301613fdd565b606082015261447c60808301613fdd565b608082015292915050565b8035613ff581613fc8565b600082601f8301126144a357600080fd5b813560206144b361405a83613fa4565b82815260059290921b840181019181810190868411156144d257600080fd5b8286015b848110156145a857803567ffffffffffffffff808211156144f75760008081fd5b8189019150608080601f19848d030112156145125760008081fd5b61451a613ebe565b878401358381111561452c5760008081fd5b61453a8d8a8388010161403b565b825250604080850135848111156145515760008081fd5b61455f8e8b8389010161403b565b8a84015250606080860135858111156145785760008081fd5b6145868f8c838a010161403b565b92840192909252949092013593810193909352505083529183019183016144d6565b509695505050505050565b600061014082840312156145c657600080fd5b6145ce613f0a565b90506145da838361441d565b815260a082013567ffffffffffffffff808211156145f757600080fd5b6146038583860161403b565b602084015260c084013591508082111561461c57600080fd5b6146288583860161403b565b604084015261463960e08501614487565b6060840152610100840135608084015261012084013591508082111561465e57600080fd5b5061466b84828501614492565b60a08301525092915050565b600082601f83011261468857600080fd5b8135602061469861405a83613fa4565b82815260059290921b840181019181810190868411156146b757600080fd5b8286015b848110156145a857803567ffffffffffffffff8111156146db5760008081fd5b6146e98986838b01016145b3565b8452509183019183016146bb565b600082601f83011261470857600080fd5b8135602061471861405a83613fa4565b82815260059290921b8401810191818101908684111561473757600080fd5b8286015b848110156145a857803567ffffffffffffffff81111561475b5760008081fd5b6147698986838b010161403b565b84525091830191830161473b565b600082601f83011261478857600080fd5b8135602061479861405a83613fa4565b82815260059290921b840181019181810190868411156147b757600080fd5b8286015b848110156145a857803567ffffffffffffffff8111156147db5760008081fd5b6147e98986838b01016146f7565b8452509183019183016147bb565b600082601f83011261480857600080fd5b8135602061481861405a83613fa4565b8083825260208201915060208460051b87010193508684111561483a57600080fd5b602086015b848110156145a8578035835291830191830161483f565b600082601f83011261486757600080fd5b8135602061487761405a83613fa4565b82815260059290921b8401810191818101908684111561489657600080fd5b8286015b848110156145a857803567ffffffffffffffff808211156148bb5760008081fd5b818901915060a080601f19848d030112156148d65760008081fd5b6148de613ee7565b6148e9888501613fdd565b8152604080850135848111156148ff5760008081fd5b61490d8e8b83890101614677565b8a84015250606080860135858111156149265760008081fd5b6149348f8c838a0101614777565b838501525060809150818601358581111561494f5760008081fd5b61495d8f8c838a01016147f7565b918401919091525091909301359083015250835291830191830161489a565b600080604080848603121561499057600080fd5b833567ffffffffffffffff808211156149a857600080fd5b6149b487838801614856565b94506020915081860135818111156149cb57600080fd5b8601601f810188136149dc57600080fd5b80356149ea61405a82613fa4565b81815260059190911b8201840190848101908a831115614a0957600080fd5b8584015b83811015614a9557803586811115614a255760008081fd5b8501603f81018d13614a375760008081fd5b87810135614a4761405a82613fa4565b81815260059190911b82018a0190898101908f831115614a675760008081fd5b928b01925b82841015614a855783358252928a0192908a0190614a6c565b8652505050918601918601614a0d565b50809750505050505050509250929050565b600060208284031215614ab957600080fd5b813567ffffffffffffffff811115614ad057600080fd5b820160a08185031215613dba57600080fd5b803563ffffffff81168114613ff557600080fd5b600060a08284031215614b0857600080fd5b614b10613ee7565b8235614b1b81613fc8565b8152614b2960208401614ae2565b6020820152614b3a60408401614ae2565b6040820152614b4b60608401614ae2565b60608201526080830135614b5e81613fc8565b60808201529392505050565b803560ff81168114613ff557600080fd5b600060208284031215614b8d57600080fd5b610ab382614b6a565b60008151808452602080850194506020840160005b83811015614bd05781516001600160a01b031687529582019590820190600101614bab565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c2a60e0840182614b96565b90506040840151601f198483030160c0850152614c478282614b96565b95945050505050565b60008060408385031215614c6357600080fd5b614c6c83613fdd565b946020939093013593505050565b60008060208385031215614c8d57600080fd5b823567ffffffffffffffff80821115614ca557600080fd5b818501915085601f830112614cb957600080fd5b813581811115614cc857600080fd5b8660208260061b8501011115614cdd57600080fd5b60209290920196919550909350505050565b600060208284031215614d0157600080fd5b610ab382613fdd565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526137dc60a08401826141d4565b60008060408385031215614d6b57600080fd5b823567ffffffffffffffff80821115614d8357600080fd5b614d8f868387016145b3565b93506020850135915080821115614da557600080fd5b50614db2858286016146f7565b9150509250929050565b600060208284031215614dce57600080fd5b8135613dba81613fc8565b600082601f830112614dea57600080fd5b81356020614dfa61405a83613fa4565b8083825260208201915060208460051b870101935086841115614e1c57600080fd5b602086015b848110156145a8578035614e3481613fc8565b8352918301918301614e21565b60006020808385031215614e5457600080fd5b823567ffffffffffffffff80821115614e6c57600080fd5b818501915085601f830112614e8057600080fd5b8135614e8e61405a82613fa4565b81815260059190911b83018401908481019088831115614ead57600080fd5b8585015b838110156141a357803585811115614ec857600080fd5b860160c0818c03601f19011215614edf5760008081fd5b614ee7613f0a565b8882013581526040614efa818401614b6a565b8a8301526060614f0b818501614b6a565b8284015260809150614f1e828501614008565b9083015260a08381013589811115614f365760008081fd5b614f448f8d83880101614dd9565b838501525060c0840135915088821115614f5e5760008081fd5b614f6c8e8c84870101614dd9565b9083015250845250918601918601614eb1565b600060208284031215614f9157600080fd5b5035919050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114613ff557600080fd5b600082601f830112614fd557600080fd5b81356020614fe561405a83613fa4565b82815260069290921b8401810191818101908684111561500457600080fd5b8286015b848110156145a857604081890312156150215760008081fd5b615029613f2d565b61503282613fdd565b815261503f858301614f98565b81860152835291830191604001615008565b600082601f83011261506257600080fd5b8135602061507261405a83613fa4565b82815260079290921b8401810191818101908684111561509157600080fd5b8286015b848110156145a85780880360808112156150af5760008081fd5b6150b7613f50565b6150c083613fdd565b8152604080601f19840112156150d65760008081fd5b6150de613f2d565b92506150eb878501613fdd565b83526150f8818501613fdd565b8388015281870192909252606083013591810191909152835291830191608001615095565b6000602080838503121561513057600080fd5b823567ffffffffffffffff8082111561514857600080fd5b8185019150604080838803121561515e57600080fd5b615166613f2d565b83358381111561517557600080fd5b84016040818a03121561518757600080fd5b61518f613f2d565b81358581111561519e57600080fd5b8201601f81018b136151af57600080fd5b80356151bd61405a82613fa4565b81815260069190911b8201890190898101908d8311156151dc57600080fd5b928a01925b8284101561522c5787848f0312156151f95760008081fd5b615201613f2d565b843561520c81613fc8565b8152615219858d01614f98565b818d0152825292870192908a01906151e1565b84525050508187013593508484111561524457600080fd5b6152508a858401614fc4565b818801528252508385013591508282111561526a57600080fd5b61527688838601615051565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561530a57835180516001600160a01b031684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168584015292840192918501916001016152be565b50508583015187820388850152805180835290840192506000918401905b80831015615379578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1685830152928401926001929092019190850190615328565b50979650505050505050565b602081526000610ab3602083018461529e565b67ffffffffffffffff8316815260608101613dba6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115615404576154046153cd565b5092915050565b60006020808352606084516040808487015261542a606087018361529e565b87850151878203601f19016040890152805180835290860193506000918601905b808310156141a357845167ffffffffffffffff81511683528781015161548a89850182805167ffffffffffffffff908116835260209182015116910152565b5084015182870152938601936001929092019160809091019061544b565b6000602082840312156154ba57600080fd5b813567ffffffffffffffff8111156154d157600080fd5b6137dc84828501614856565b81810381811115610ab657610ab66153cd565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff80841680615521576155216154f0565b92169190910692915050565b8082028115828204841417610ab657610ab66153cd565b60006040828403121561555657600080fd5b61555e613f2d565b61556783613fdd565b8152602083013560208201528091505092915050565b600181811c9082168061559157607f821691505b6020821081036155b157634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a060408701526155eb60a08701826141d4565b90506060850151868203606088015261560482826141d4565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561537957835180516001600160a01b0316835286015186830152928501926001929092019190840190615627565b602081526000610ab360208301846155b7565b60808152600061567f60808301876155b7565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156156bd57600080fd5b83516156c881613ffa565b602085015190935067ffffffffffffffff8111156156e557600080fd5b8401601f810186136156f657600080fd5b805161570461405a82614013565b81815287602083850101111561571957600080fd5b61572a8260208301602086016141b0565b809450505050604084015190509250925092565b60006020828403121561575057600080fd5b8151613dba81613ffa565b601f821115610d15576000816000526020600020601f850160051c810160208610156157845750805b601f850160051c820191505b8181101561257557828155600101615790565b815167ffffffffffffffff8111156157bd576157bd613ea8565b6157d1816157cb845461557d565b8461575b565b602080601f83116001811461580657600084156157ee5750858301515b600019600386901b1c1916600185901b178555612575565b600085815260208120601f198616915b8281101561583557888601518255948401946001909101908401615816565b50858210156158535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c166060850152506001808501608080860152600081546158b58161557d565b8060a089015260c060018316600081146158d657600181146158f257615922565b60ff19841660c08b015260c083151560051b8b01019450615922565b85600052602060002060005b848110156159195781548c82018501529088019089016158fe565b8b0160c0019550505b50929998505050505050505050565b80820180821115610ab657610ab66153cd565b60ff8181168382160190811115610ab657610ab66153cd565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061599c5761599c6154f0565b92169190910492915050565b60208101600583106159bc576159bc6143e5565b91905290565b60ff8181168382160290811690818114615404576154046153cd565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a365784546001600160a01b031683526001948501949284019201615a11565b50508481036060860152865180825290820192508187019060005b81811015615a765782516001600160a01b031685529383019391830191600101615a51565b50505060ff851660808501525090505b9695505050505050565b600067ffffffffffffffff808616835280851660208401525060606040830152614c4760608301846141d4565b8281526040602082015260006137dc60408301846141d4565b67ffffffffffffffff848116825283166020820152606081016137dc60408301846143fb565b615b0681846143fb565b6040602082015260006137dc60408301846141d4565b600060208284031215615b2e57600080fd5b8151613dba81613fc8565b6020815260008251610100806020850152615b586101208501836141d4565b91506020850151615b75604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615baf60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bcc84836141d4565b935060c08701519150808685030160e0870152615be984836141d4565b935060e0870151915080868503018387015250615a8683826141d4565b600060208284031215615c1857600080fd5b5051919050565b600060ff821660ff8103615c3557615c356153cd565b60010192915050565b848152600067ffffffffffffffff808616602084015280851660408401525060806060830152615a8660808301846141d4565b86815260c060208201526000615c8a60c08301886141d4565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d5b57601f19868403018952815160808151818652615d07828701826141d4565b9150508582015185820387870152615d1f82826141d4565b91505060408083015186830382880152615d3983826141d4565b6060948501519790940196909652505098840198925090830190600101615ce1565b5090979650505050505050565b602081526000610ab36020830184615cc4565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d5b57601f19868403018952615db68383516141d4565b98840198925090830190600101615d9a565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e306101808501836141d4565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e6d84836141d4565b935060608801519150615e8c6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615eb38282615cc4565b9150508281036020840152614c478185615d7b56fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006bb338038062006bb38339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615edd62000cd6600039600081816102530152612cac0152600081816102240152612f860152600081816101f50152818161147b01526118d00152600081816101c501526128a1015260008181611e5e0152611eaa0152615edd6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b1461059c578063f716f99f146105af578063ff888fb1146105c257600080fd5b8063d2a15d3514610556578063e9d68a8e14610569578063ece670b61461058957600080fd5b8063991a5018116100bd578063991a5018146104de578063c673e584146104f1578063ccd37ba31461051157600080fd5b806385572ffb146104b55780638da5cb5b146104c357600080fd5b80633f4b04aa1161012f5780637437ff9f116101145780637437ff9f1461038557806379ba50971461049a5780637d4eef60146104a257600080fd5b80633f4b04aa146103495780635e36480c1461036557600080fd5b8063181f5a7711610160578063181f5a77146102da5780632d04ab7614610323578063311cd5131461033657600080fd5b806304666f9c1461017c57806306285c6914610191575b600080fd5b61018f61018a366004614099565b6105e5565b005b61028360408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102d19190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103166040518060400160405280601d81526020017f45564d3245564d4d756c74694f666652616d7020312e362e302d64657600000081525081565b6040516102d19190614208565b61018f6103313660046142b3565b6105f9565b61018f610344366004614366565b6109fd565b60095460405167ffffffffffffffff90911681526020016102d1565b6103786103733660046143ba565b610a66565b6040516102d19190614417565b61043d6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b830481166020850152780100000000000000000000000000000000000000000000000083048116948401949094527c01000000000000000000000000000000000000000000000000000000009091049092166060820152600554909116608082015290565b6040516102d19190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610abc565b61018f6104b0366004614984565b610b7a565b61018f610177366004614aaf565b6000546040516001600160a01b0390911681526020016102d1565b61018f6104ec366004614afe565b610d1a565b6105046104ff366004614b83565b610d2b565b6040516102d19190614be3565b61054861051f366004614c58565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102d1565b61018f610564366004614c82565b610e89565b61057c610577366004614cf7565b610f43565b6040516102d19190614d12565b61018f610597366004614d60565b611062565b61018f6105aa366004614dc4565b6113d2565b61018f6105bd366004614e49565b6113e3565b6105d56105d0366004614f87565b611425565b60405190151581526020016102d1565b6105ed6114e6565b6105f681611542565b50565b600061060787890189615125565b8051515190915015158061062057508051602001515115155b156107205760095460208a01359067ffffffffffffffff808316911610156106df576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f926106a892910161538d565b600060405180830381600087803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b5050505061071e565b81602001515160000361071e576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b8160200151518110156109465760008260200151828151811061074857610748615290565b6020026020010151905060008160000151905061076481611884565b600061076f82611986565b602084015151815491925067ffffffffffffffff9081167501000000000000000000000000000000000000000000909204161415806107c5575060208084015190810151905167ffffffffffffffff9182169116115b1561080e57825160208401516040517feefb0cac0000000000000000000000000000000000000000000000000000000081526108059291906004016153a0565b60405180910390fd5b60408301518061084a576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600860209081526040808320848452909152902054156108bd5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610805565b60208085015101516108d09060016153eb565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000067ffffffffffffffff928316021790925592511660009081526008602090815260408083209483529390529190912042905550600101610723565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d816040516109769190615413565b60405180910390a16109f260008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92506119ed915050565b505050505050505050565b610a3d610a0c828401846154b0565b6040805160008082526020820190925290610a37565b6060815260200190600190039081610a225790505b50611d64565b604080516000808252602082019092529050610a606001858585858660006119ed565b50505050565b6000610a74600160046154e5565b6002610a8160808561550e565b67ffffffffffffffff16610a959190615535565b610a9f8585611e14565b901c166003811115610ab357610ab36143ed565b90505b92915050565b6001546001600160a01b03163314610b165760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610805565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b82611e5b565b815181518114610bbe576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610d0a576000848281518110610bdd57610bdd615290565b60200260200101519050600081602001515190506000858481518110610c0557610c05615290565b6020026020010151905080518214610c49576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610cfb576000828281518110610c6857610c68615290565b6020026020010151905080600014610cf25784602001518281518110610c9057610c90615290565b602002602001015160800151811015610cf25784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024810183905260448101829052606401610805565b50600101610c4c565b50505050806001019050610bc1565b50610d158383611d64565b505050565b610d226114e6565b6105f681611edc565b610d6e6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610e1757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610df9575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e7957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e5b575b5050505050815250509050919050565b610e916114e6565b60005b81811015610d15576000838383818110610eb057610eb0615290565b905060400201803603810190610ec6919061554c565b9050610ed58160200151611425565b610f3a57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101610e94565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff161515938601939093527501000000000000000000000000000000000000000000909204909216948301949094526001840180549394929391840191610fe290615585565b80601f016020809104026020016040519081016040528092919081815260200182805461100e90615585565b8015610e795780601f1061103057610100808354040283529160200191610e79565b820191906000526020600020905b81548152906001019060200180831161103e57505050919092525091949350505050565b33301461109b576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600080825260208201909252816110d8565b60408051808201909152600080825260208201528152602001906001900390816110b15790505b5060a0840151519091501561110b576111088360a001518460200151856060015186600001516020015186612089565b90505b6040805160a0810182528451518152845160209081015167ffffffffffffffff1681830152808601518351600094840192611147929101614208565b60408051601f19818403018152918152908252868101516020830152018390526005549091506001600160a01b03168015611254576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a1906111c1908590600401615661565b600060405180830381600087803b1580156111db57600080fd5b505af19250505080156111ec575060015b611254573d80801561121a576040519150601f19603f3d011682016040523d82523d6000602084013e61121f565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016108059190614208565b60408501515115801561126957506080850151155b80611280575060608501516001600160a01b03163b155b806112c0575060608501516112be906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612167565b155b156112cc575050505050565b845160209081015167ffffffffffffffff16600090815260069091526040808220546080880151606089015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf97983926113449289926113889291600401615674565b6000604051808303816000875af1158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138b91908101906156b0565b5091509150816113c957806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016108059190614208565b50505050505050565b6113da6114e6565b6105f681612183565b6113eb6114e6565b60005b81518110156114215761141982828151811061140c5761140c615290565b6020026020010151612239565b6001016113ee565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa1580156114c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab69190615746565b6000546001600160a01b031633146115405760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610805565b565b60005b815181101561142157600082828151811061156257611562615290565b602002602001015190506000816020015190508067ffffffffffffffff166000036115b9576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b03166115fa576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8116600090815260066020526040812060018101805491929161162590615585565b80601f016020809104026020016040519081016040528092919081815260200182805461165190615585565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905060008460600151905081516000036117815780516000036116f2576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001830161170082826157ab565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117d4565b80805190602001208280519060200120146117d4576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610805565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b9061186c90869061586b565b60405180910390a25050505050806001019050611545565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561191f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119439190615746565b156105f6576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610805565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610ab6576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610805565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611a4c8760a4615939565b9050826060015115611a94578451611a65906020615535565b8651611a72906020615535565b611a7d9060a0615939565b611a879190615939565b611a919082615939565b90505b368114611ad6576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610805565b5081518114611b1e5781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610805565b611b26611e5b565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611b7457611b746143ed565b6002811115611b8557611b856143ed565b9052509050600281602001516002811115611ba257611ba26143ed565b148015611bf65750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611bde57611bde615290565b6000918252602090912001546001600160a01b031633145b611c2c576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611d0e576020820151611c4790600161594c565b60ff16855114611c83576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611cbe576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611cd0929190615965565b604051908190038120611ce7918b90602001615975565b604051602081830303815290604052805190602001209050611d0c8a8288888861257d565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611d9e576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611e0d57611e05858281518110611dd357611dd3615290565b602002602001015184611dff57858381518110611df257611df2615290565b6020026020010151612794565b83612794565b600101611db5565b5050505050565b67ffffffffffffffff8216600090815260076020526040812081611e39608085615989565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f000000000000000000000000000000000000000000000000000000000000000014611540576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610805565b80516001600160a01b0316611f1d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16939093177c010000000000000000000000000000000000000000000000000000000093871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060855167ffffffffffffffff8111156120a5576120a5613eb0565b6040519080825280602002602001820160405280156120ea57816020015b60408051808201909152600080825260208201528152602001906001900390816120c35790505b50905060005b865181101561215d5761213887828151811061210e5761210e615290565b602002602001015187878787868151811061212b5761212b615290565b6020026020010151612f25565b82828151811061214a5761214a615290565b60209081029190910101526001016120f0565b5095945050505050565b60006121728361333c565b8015610ab35750610ab383836133a0565b336001600160a01b038216036121db5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610805565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612264576000604051631b3fab5160e11b815260040161080591906159b0565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036122d157606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612326565b6060840151600182015460ff6201000090910416151590151514612326576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610805565b60a08401518051601f60ff82161115612355576001604051631b3fab5160e11b815260040161080591906159b0565b6123bb85856003018054806020026020016040519081016040528092919081815260200182805480156123b157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612393575b505050505061346f565b8560600151156124ea5761242985856002018054806020026020016040519081016040528092919081815260200182805480156123b1576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161239357505050505061346f565b608086015180516124439060028701906020840190613e0a565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f10156124a3576002604051631b3fab5160e11b815260040161080591906159b0565b60408801516124b39060036159ca565b60ff168160ff16116124db576003604051631b3fab5160e11b815260040161080591906159b0565b6124e7878360016134d8565b50505b6124f6858360026134d8565b815161250b9060038601906020850190613e0a565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793612564938a939260028b019291906159e6565b60405180910390a161257585613658565b505050505050565b612585613e7c565b835160005b8181101561278a5760006001888684602081106125a9576125a9615290565b6125b691901a601b61594c565b8985815181106125c8576125c8615290565b60200260200101518986815181106125e2576125e2615290565b602002602001015160405160008152602001604052604051612620949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612642573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156126a3576126a36143ed565b60028111156126b4576126b46143ed565b90525090506001816020015160028111156126d1576126d16143ed565b14612708576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f811061271f5761271f615290565b60200201511561275b576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f811061277657612776615290565b91151560209092020152505060010161258a565b5050505050505050565b815161279f81611884565b60006127aa82611986565b60208501515190915060008190036127ed576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015151811461282b576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561284657612846613eb0565b60405190808252806020026020018201604052801561286f578160200160208202803683370190505b50905060005b828110156129e45760008760200151828151811061289557612895615290565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461292857805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610805565b6129be8186600101805461293b90615585565b80601f016020809104026020016040519081016040528092919081815260200182805461296790615585565b80156129b45780601f10612989576101008083540402835291602001916129b4565b820191906000526020600020905b81548152906001019060200180831161299757829003601f168201915b5050505050613674565b8383815181106129d0576129d0615290565b602090810291909101015250600101612875565b5060006129fb858389606001518a60800151613796565b905080600003612a43576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610805565b8551151560005b848110156109f257600089602001518281518110612a6a57612a6a615290565b602002602001015190506000612a8889836000015160600151610a66565b90506000816003811115612a9e57612a9e6143ed565b1480612abb57506003816003811115612ab957612ab96143ed565b145b612b12578151606001516040805167ffffffffffffffff808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a15050612f1d565b8315612be257600454600090600160a01b900463ffffffff16612b3587426154e5565b1190508080612b5557506003826003811115612b5357612b536143ed565b145b612b97576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b166004820152602401610805565b8a8481518110612ba957612ba9615290565b6020026020010151600014612bdc578a8481518110612bca57612bca615290565b60200260200101518360800181815250505b50612c43565b6000816003811115612bf657612bf66143ed565b14612c43578151606001516040805167ffffffffffffffff808d16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612b03565b81516080015167ffffffffffffffff1615612d31576000816003811115612c6c57612c6c6143ed565b03612d315781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ce3928e929190600401615a98565b6020604051808303816000875af1158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d269190615746565b612d31575050612f1d565b60008b604001518481518110612d4957612d49615290565b6020026020010151905080518360a001515114612dad578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808d1660048301529091166024820152604401610805565b612dc18a84600001516060015160016137ec565b600080612dce8584613894565b91509150612de58c866000015160600151846137ec565b8615612e55576003826003811115612dff57612dff6143ed565b03612e55576000846003811115612e1857612e186143ed565b14612e55578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261080591908390600401615ac5565b6002826003811115612e6957612e696143ed565b14612ec3576003826003811115612e8257612e826143ed565b14612ec3578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610805918e918590600401615ade565b8451805160609091015160405167ffffffffffffffff918216918f16907f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df290612f0f9087908790615b04565b60405180910390a450505050505b600101612a4a565b60408051808201909152600080825260208201526000612f48876020015161395e565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190615b24565b90506001600160a01b038116158061303957506130376001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612167565b155b1561307b576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610805565b6000806131816040518061010001604052808b81526020018967ffffffffffffffff1681526020018a6001600160a01b031681526020018c606001518152602001866001600160a01b031681526020018c6000015181526020018c604001518152602001888152506040516024016130f39190615b41565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3907753700000000000000000000000000000000000000000000000000000000179052600454859063ffffffff7c0100000000000000000000000000000000000000000000000000000000909104166113886084613a04565b5091509150816131bf57806040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016108059190614208565b80516020146132075780516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610805565b60008180602001905181019061321d9190615c0e565b6040516001600160a01b0380871660248301528b166044820152606481018290529091506132d29060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052600454879063ffffffff7801000000000000000000000000000000000000000000000000909104166113886084613a04565b5090935091508261331157816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016108059190614208565b604080518082019091526001600160a01b039095168552602085015250919250505095945050505050565b6000613368827f01ffc9a7000000000000000000000000000000000000000000000000000000006133a0565b8015610ab65750613399827fffffffff000000000000000000000000000000000000000000000000000000006133a0565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613458575060208210155b80156134645750600081115b979650505050505050565b60005b8151811015610d155760ff8316600090815260036020526040812083519091908490849081106134a4576134a4615290565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613472565b60005b82518160ff161015610a60576000838260ff16815181106134fe576134fe615290565b602002602001015190506000600281111561351b5761351b6143ed565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561355a5761355a6143ed565b1461357b576004604051631b3fab5160e11b815260040161080591906159b0565b6001600160a01b0381166135bb576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156135e1576135e16143ed565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561363e5761363e6143ed565b0217905550905050508061365190615c27565b90506134db565b60ff81166105f6576009805467ffffffffffffffff1916905550565b8151602080820151604092830151925160009384936136ba937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c46565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976137039794969395929491939101615c79565b604051602081830303815290604052805190602001208560400151805190602001208660a0015160405160200161373a9190615d70565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b6000806137a4858585613b2a565b90506137af81611425565b6137bd5760009150506137e4565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026137fb60808561550e565b67ffffffffffffffff1661380f9190615535565b9050600061381d8585611e14565b90508161382c600160046154e5565b901b191681836003811115613843576138436143ed565b67ffffffffffffffff871660009081526007602052604081209190921b92909217918291613872608088615989565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b6906138d89087908790600401615dd0565b600060405180830381600087803b1580156138f257600080fd5b505af1925050508015613903575060015b613942573d808015613931576040519150601f19603f3d011682016040523d82523d6000602084013e613936565b606091505b50600392509050613957565b50506040805160208101909152600081526002905b9250929050565b6000815160201461399d57816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016108059190614208565b6000828060200190518101906139b39190615c0e565b90506001600160a01b038111806139cb575061040081105b15610ab657826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016108059190614208565b6000606060008361ffff1667ffffffffffffffff811115613a2757613a27613eb0565b6040519080825280601f01601f191660200182016040528015613a51576020820181803683370190505b509150863b613a84577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613ab7577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613af0577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b135750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b6b576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b7f57506101018111155b613b9c576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bc6576040516309bde33960e01b815260040160405180910390fd5b80600003613bf35786600081518110613be157613be1615290565b60200260200101519350505050613dc2565b60008167ffffffffffffffff811115613c0e57613c0e613eb0565b604051908082528060200260200182016040528015613c37578160200160208202803683370190505b50905060008080805b85811015613d615760006001821b8b811603613c9b5788851015613c84578c5160018601958e918110613c7557613c75615290565b60200260200101519050613cbd565b8551600185019487918110613c7557613c75615290565b8b5160018401938d918110613cb257613cb2615290565b602002602001015190505b600089861015613ced578d5160018701968f918110613cde57613cde615290565b60200260200101519050613d0f565b8651600186019588918110613d0457613d04615290565b602002602001015190505b82851115613d30576040516309bde33960e01b815260040160405180910390fd5b613d3a8282613dc9565b878481518110613d4c57613d4c615290565b60209081029190910101525050600101613c40565b506001850382148015613d7357508683145b8015613d7e57508581145b613d9b576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613db057613db0615290565b60200260200101519750505050505050505b9392505050565b6000818310613de157613ddc8284613de7565b610ab3565b610ab383835b604080516001602082015290810183905260608101829052600090608001613778565b828054828255906000526020600020908101928215613e6c579160200282015b82811115613e6c578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e2a565b50613e78929150613e9b565b5090565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613e785760008155600101613e9c565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee957613ee9613eb0565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ee957613ee9613eb0565b60405160c0810167ffffffffffffffff81118282101715613ee957613ee9613eb0565b6040805190810167ffffffffffffffff81118282101715613ee957613ee9613eb0565b6040516060810167ffffffffffffffff81118282101715613ee957613ee9613eb0565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fa457613fa4613eb0565b604052919050565b600067ffffffffffffffff821115613fc657613fc6613eb0565b5060051b60200190565b6001600160a01b03811681146105f657600080fd5b803567ffffffffffffffff81168114613ffd57600080fd5b919050565b80151581146105f657600080fd5b8035613ffd81614002565b600067ffffffffffffffff82111561403557614035613eb0565b50601f01601f191660200190565b600082601f83011261405457600080fd5b81356140676140628261401b565b613f7b565b81815284602083860101111561407c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156140ac57600080fd5b823567ffffffffffffffff808211156140c457600080fd5b818501915085601f8301126140d857600080fd5b81356140e661406282613fac565b81815260059190911b8301840190848101908883111561410557600080fd5b8585015b838110156141ab578035858111156141215760008081fd5b86016080818c03601f19018113156141395760008081fd5b614141613ec6565b8983013561414e81613fd0565b8152604061415d848201613fe5565b8b83015260608085013561417081614002565b8383015292840135928984111561418957600091508182fd5b6141978f8d86880101614043565b908301525085525050918601918601614109565b5098975050505050505050565b60005b838110156141d35781810151838201526020016141bb565b50506000910152565b600081518084526141f48160208601602086016141b8565b601f01601f19169290920160200192915050565b602081526000610ab360208301846141dc565b8060608101831015610ab657600080fd5b60008083601f84011261423e57600080fd5b50813567ffffffffffffffff81111561425657600080fd5b60208301915083602082850101111561395757600080fd5b60008083601f84011261428057600080fd5b50813567ffffffffffffffff81111561429857600080fd5b6020830191508360208260051b850101111561395757600080fd5b60008060008060008060008060e0898b0312156142cf57600080fd5b6142d98a8a61421b565b9750606089013567ffffffffffffffff808211156142f657600080fd5b6143028c838d0161422c565b909950975060808b013591508082111561431b57600080fd5b6143278c838d0161426e565b909750955060a08b013591508082111561434057600080fd5b5061434d8b828c0161426e565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561437b57600080fd5b614385858561421b565b9250606084013567ffffffffffffffff8111156143a157600080fd5b6143ad8682870161422c565b9497909650939450505050565b600080604083850312156143cd57600080fd5b6143d683613fe5565b91506143e460208401613fe5565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614413576144136143ed565b9052565b60208101610ab68284614403565b600060a0828403121561443757600080fd5b61443f613eef565b90508135815261445160208301613fe5565b602082015261446260408301613fe5565b604082015261447360608301613fe5565b606082015261448460808301613fe5565b608082015292915050565b8035613ffd81613fd0565b600082601f8301126144ab57600080fd5b813560206144bb61406283613fac565b82815260059290921b840181019181810190868411156144da57600080fd5b8286015b848110156145b057803567ffffffffffffffff808211156144ff5760008081fd5b8189019150608080601f19848d0301121561451a5760008081fd5b614522613ec6565b87840135838111156145345760008081fd5b6145428d8a83880101614043565b825250604080850135848111156145595760008081fd5b6145678e8b83890101614043565b8a84015250606080860135858111156145805760008081fd5b61458e8f8c838a0101614043565b92840192909252949092013593810193909352505083529183019183016144de565b509695505050505050565b600061014082840312156145ce57600080fd5b6145d6613f12565b90506145e28383614425565b815260a082013567ffffffffffffffff808211156145ff57600080fd5b61460b85838601614043565b602084015260c084013591508082111561462457600080fd5b61463085838601614043565b604084015261464160e0850161448f565b6060840152610100840135608084015261012084013591508082111561466657600080fd5b506146738482850161449a565b60a08301525092915050565b600082601f83011261469057600080fd5b813560206146a061406283613fac565b82815260059290921b840181019181810190868411156146bf57600080fd5b8286015b848110156145b057803567ffffffffffffffff8111156146e35760008081fd5b6146f18986838b01016145bb565b8452509183019183016146c3565b600082601f83011261471057600080fd5b8135602061472061406283613fac565b82815260059290921b8401810191818101908684111561473f57600080fd5b8286015b848110156145b057803567ffffffffffffffff8111156147635760008081fd5b6147718986838b0101614043565b845250918301918301614743565b600082601f83011261479057600080fd5b813560206147a061406283613fac565b82815260059290921b840181019181810190868411156147bf57600080fd5b8286015b848110156145b057803567ffffffffffffffff8111156147e35760008081fd5b6147f18986838b01016146ff565b8452509183019183016147c3565b600082601f83011261481057600080fd5b8135602061482061406283613fac565b8083825260208201915060208460051b87010193508684111561484257600080fd5b602086015b848110156145b05780358352918301918301614847565b600082601f83011261486f57600080fd5b8135602061487f61406283613fac565b82815260059290921b8401810191818101908684111561489e57600080fd5b8286015b848110156145b057803567ffffffffffffffff808211156148c35760008081fd5b818901915060a080601f19848d030112156148de5760008081fd5b6148e6613eef565b6148f1888501613fe5565b8152604080850135848111156149075760008081fd5b6149158e8b8389010161467f565b8a840152506060808601358581111561492e5760008081fd5b61493c8f8c838a010161477f565b83850152506080915081860135858111156149575760008081fd5b6149658f8c838a01016147ff565b91840191909152509190930135908301525083529183019183016148a2565b600080604080848603121561499857600080fd5b833567ffffffffffffffff808211156149b057600080fd5b6149bc8783880161485e565b94506020915081860135818111156149d357600080fd5b8601601f810188136149e457600080fd5b80356149f261406282613fac565b81815260059190911b8201840190848101908a831115614a1157600080fd5b8584015b83811015614a9d57803586811115614a2d5760008081fd5b8501603f81018d13614a3f5760008081fd5b87810135614a4f61406282613fac565b81815260059190911b82018a0190898101908f831115614a6f5760008081fd5b928b01925b82841015614a8d5783358252928a0192908a0190614a74565b8652505050918601918601614a15565b50809750505050505050509250929050565b600060208284031215614ac157600080fd5b813567ffffffffffffffff811115614ad857600080fd5b820160a08185031215613dc257600080fd5b803563ffffffff81168114613ffd57600080fd5b600060a08284031215614b1057600080fd5b614b18613eef565b8235614b2381613fd0565b8152614b3160208401614aea565b6020820152614b4260408401614aea565b6040820152614b5360608401614aea565b60608201526080830135614b6681613fd0565b60808201529392505050565b803560ff81168114613ffd57600080fd5b600060208284031215614b9557600080fd5b610ab382614b72565b60008151808452602080850194506020840160005b83811015614bd85781516001600160a01b031687529582019590820190600101614bb3565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c3260e0840182614b9e565b90506040840151601f198483030160c0850152614c4f8282614b9e565b95945050505050565b60008060408385031215614c6b57600080fd5b614c7483613fe5565b946020939093013593505050565b60008060208385031215614c9557600080fd5b823567ffffffffffffffff80821115614cad57600080fd5b818501915085601f830112614cc157600080fd5b813581811115614cd057600080fd5b8660208260061b8501011115614ce557600080fd5b60209290920196919550909350505050565b600060208284031215614d0957600080fd5b610ab382613fe5565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526137e460a08401826141dc565b60008060408385031215614d7357600080fd5b823567ffffffffffffffff80821115614d8b57600080fd5b614d97868387016145bb565b93506020850135915080821115614dad57600080fd5b50614dba858286016146ff565b9150509250929050565b600060208284031215614dd657600080fd5b8135613dc281613fd0565b600082601f830112614df257600080fd5b81356020614e0261406283613fac565b8083825260208201915060208460051b870101935086841115614e2457600080fd5b602086015b848110156145b0578035614e3c81613fd0565b8352918301918301614e29565b60006020808385031215614e5c57600080fd5b823567ffffffffffffffff80821115614e7457600080fd5b818501915085601f830112614e8857600080fd5b8135614e9661406282613fac565b81815260059190911b83018401908481019088831115614eb557600080fd5b8585015b838110156141ab57803585811115614ed057600080fd5b860160c0818c03601f19011215614ee75760008081fd5b614eef613f12565b8882013581526040614f02818401614b72565b8a8301526060614f13818501614b72565b8284015260809150614f26828501614010565b9083015260a08381013589811115614f3e5760008081fd5b614f4c8f8d83880101614de1565b838501525060c0840135915088821115614f665760008081fd5b614f748e8c84870101614de1565b9083015250845250918601918601614eb9565b600060208284031215614f9957600080fd5b5035919050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114613ffd57600080fd5b600082601f830112614fdd57600080fd5b81356020614fed61406283613fac565b82815260069290921b8401810191818101908684111561500c57600080fd5b8286015b848110156145b057604081890312156150295760008081fd5b615031613f35565b61503a82613fe5565b8152615047858301614fa0565b81860152835291830191604001615010565b600082601f83011261506a57600080fd5b8135602061507a61406283613fac565b82815260079290921b8401810191818101908684111561509957600080fd5b8286015b848110156145b05780880360808112156150b75760008081fd5b6150bf613f58565b6150c883613fe5565b8152604080601f19840112156150de5760008081fd5b6150e6613f35565b92506150f3878501613fe5565b8352615100818501613fe5565b838801528187019290925260608301359181019190915283529183019160800161509d565b6000602080838503121561513857600080fd5b823567ffffffffffffffff8082111561515057600080fd5b8185019150604080838803121561516657600080fd5b61516e613f35565b83358381111561517d57600080fd5b84016040818a03121561518f57600080fd5b615197613f35565b8135858111156151a657600080fd5b8201601f81018b136151b757600080fd5b80356151c561406282613fac565b81815260069190911b8201890190898101908d8311156151e457600080fd5b928a01925b828410156152345787848f0312156152015760008081fd5b615209613f35565b843561521481613fd0565b8152615221858d01614fa0565b818d0152825292870192908a01906151e9565b84525050508187013593508484111561524c57600080fd5b6152588a858401614fcc565b818801528252508385013591508282111561527257600080fd5b61527e88838601615059565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561531257835180516001600160a01b031684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168584015292840192918501916001016152c6565b50508583015187820388850152805180835290840192506000918401905b80831015615381578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1685830152928401926001929092019190850190615330565b50979650505050505050565b602081526000610ab360208301846152a6565b67ffffffffffffffff8316815260608101613dc26020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561540c5761540c6153d5565b5092915050565b60006020808352606084516040808487015261543260608701836152a6565b87850151878203601f19016040890152805180835290860193506000918601905b808310156141ab57845167ffffffffffffffff81511683528781015161549289850182805167ffffffffffffffff908116835260209182015116910152565b50840151828701529386019360019290920191608090910190615453565b6000602082840312156154c257600080fd5b813567ffffffffffffffff8111156154d957600080fd5b6137e48482850161485e565b81810381811115610ab657610ab66153d5565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff80841680615529576155296154f8565b92169190910692915050565b8082028115828204841417610ab657610ab66153d5565b60006040828403121561555e57600080fd5b615566613f35565b61556f83613fe5565b8152602083013560208201528091505092915050565b600181811c9082168061559957607f821691505b6020821081036155b957634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a060408701526155f360a08701826141dc565b90506060850151868203606088015261560c82826141dc565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561538157835180516001600160a01b031683528601518683015292850192600192909201919084019061562f565b602081526000610ab360208301846155bf565b60808152600061568760808301876155bf565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156156c557600080fd5b83516156d081614002565b602085015190935067ffffffffffffffff8111156156ed57600080fd5b8401601f810186136156fe57600080fd5b805161570c6140628261401b565b81815287602083850101111561572157600080fd5b6157328260208301602086016141b8565b809450505050604084015190509250925092565b60006020828403121561575857600080fd5b8151613dc281614002565b601f821115610d15576000816000526020600020601f850160051c8101602086101561578c5750805b601f850160051c820191505b8181101561257557828155600101615798565b815167ffffffffffffffff8111156157c5576157c5613eb0565b6157d9816157d38454615585565b84615763565b602080601f83116001811461580e57600084156157f65750858301515b600019600386901b1c1916600185901b178555612575565b600085815260208120601f198616915b8281101561583d5788860151825594840194600190910190840161581e565b508582101561585b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c166060850152506001808501608080860152600081546158bd81615585565b8060a089015260c060018316600081146158de57600181146158fa5761592a565b60ff19841660c08b015260c083151560051b8b0101945061592a565b85600052602060002060005b848110156159215781548c8201850152908801908901615906565b8b0160c0019550505b50929998505050505050505050565b80820180821115610ab657610ab66153d5565b60ff8181168382160190811115610ab657610ab66153d5565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff808416806159a4576159a46154f8565b92169190910492915050565b60208101600583106159c4576159c46143ed565b91905290565b60ff818116838216029081169081811461540c5761540c6153d5565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a3e5784546001600160a01b031683526001948501949284019201615a19565b50508481036060860152865180825290820192508187019060005b81811015615a7e5782516001600160a01b031685529383019391830191600101615a59565b50505060ff851660808501525090505b9695505050505050565b600067ffffffffffffffff808616835280851660208401525060606040830152614c4f60608301846141dc565b8281526040602082015260006137e460408301846141dc565b67ffffffffffffffff848116825283166020820152606081016137e46040830184614403565b615b0e8184614403565b6040602082015260006137e460408301846141dc565b600060208284031215615b3657600080fd5b8151613dc281613fd0565b6020815260008251610100806020850152615b606101208501836141dc565b91506020850151615b7d604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615bb760a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bd484836141dc565b935060c08701519150808685030160e0870152615bf184836141dc565b935060e0870151915080868503018387015250615a8e83826141dc565b600060208284031215615c2057600080fd5b5051919050565b600060ff821660ff8103615c3d57615c3d6153d5565b60010192915050565b848152600067ffffffffffffffff808616602084015280851660408401525060806060830152615a8e60808301846141dc565b86815260c060208201526000615c9260c08301886141dc565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d6357601f19868403018952815160808151818652615d0f828701826141dc565b9150508582015185820387870152615d2782826141dc565b91505060408083015186830382880152615d4183826141dc565b6060948501519790940196909652505098840198925090830190600101615ce9565b5090979650505050505050565b602081526000610ab36020830184615ccc565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d6357601f19868403018952615dbe8383516141dc565b98840198925090830190600101615da2565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e386101808501836141dc565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e7584836141dc565b935060608801519150615e946101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615ebb8282615ccc565b9150508281036020840152614c4f8185615d8356fea164736f6c6343000818000a", } var EVM2EVMMultiOffRampABI = EVM2EVMMultiOffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go index 8e2cab8d8f..010953fdf0 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go @@ -105,7 +105,7 @@ type RateLimiterTokenBucket struct { var EVM2EVMOffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitStoreAlreadyInUse\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumOCR2BaseNoChecks.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdminOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"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\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"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\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedIncorrectNonce\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedSenderWithPreviousRampMessageInflight\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"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\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllRateLimitTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"sourceTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"destTokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getSenderNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransmitters\",\"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\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport\",\"name\":\"report\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setOCR2Config\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setRateLimiterConfig\",\"outputs\":[],\"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\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destToken\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.RateLimitToken[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destToken\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.RateLimitToken[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"updateRateLimitTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101a06040523480156200001257600080fd5b5060405162005e0a38038062005e0a8339810160408190526200003591620004ec565b8033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c081620002ca565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606080870182905298909601519091166080948501819052600380546001600160a01b031916909217600160801b9485021760ff60a01b1916600160a01b90930292909217905502909117600455469052508201516001600160a01b031615806200016f575081516001600160a01b0316155b8062000186575060c08201516001600160a01b0316155b15620001a5576040516342bcdf7f60e11b815260040160405180910390fd5b81600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e9190620005b5565b6001600160401b03166001146200023857604051636fc2a20760e11b815260040160405180910390fd5b81516001600160a01b0390811660a090815260408401516001600160401b0390811660c0908152602086015190911660e05260608501518316610100526080850151831661014052908401518216610160528301511661018052620002bd7f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b362000375565b6101205250620005da9050565b336001600160a01b03821603620003245760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e05161010051604051602001620003bf94939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b60405160e081016001600160401b03811182821017156200040d57634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200042b57600080fd5b919050565b80516001600160401b03811681146200042b57600080fd5b80516001600160801b03811681146200042b57600080fd5b6000606082840312156200047357600080fd5b604051606081016001600160401b0381118282101715620004a457634e487b7160e01b600052604160045260246000fd5b806040525080915082518015158114620004bd57600080fd5b8152620004cd6020840162000448565b6020820152620004e06040840162000448565b60408201525092915050565b6000808284036101408112156200050257600080fd5b60e08112156200051157600080fd5b506200051c620003dc565b620005278462000413565b8152620005376020850162000430565b60208201526200054a6040850162000430565b60408201526200055d6060850162000413565b6060820152620005706080850162000413565b60808201526200058360a0850162000413565b60a08201526200059660c0850162000413565b60c08201529150620005ac8460e0850162000460565b90509250929050565b600060208284031215620005c857600080fd5b620005d38262000430565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051615741620006c9600039600081816102ec01528181611a5201526130470152600081816102bd01528181611a2a0152611cdc01526000818161028e01528181610e7f01528181610ee401528181611a000152818161222d015261229701526000611e7b01526000818161025f01526119d60152600081816101ff015261197a01526000818161022f015281816119ae01528181611c9901528181612ca901526131580152600081816101d0015281816119550152611f5b015260008181611bf30152611c3f01526157416000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806381ff7048116100d8578063afcb95d71161008c578063f077b59211610066578063f077b592146105f3578063f2fde38b14610609578063f52121a51461061c57600080fd5b8063afcb95d7146105ad578063b1dc65a4146105cd578063c92b2832146105e057600080fd5b8063856c8247116100bd578063856c82471461055d578063873504d7146105895780638da5cb5b1461059c57600080fd5b806381ff70481461051f57806385572ffb1461054f57600080fd5b8063599f64311161013a578063740f415011610114578063740f4150146104615780637437ff9f1461047457806379ba50971461051757600080fd5b8063599f643114610414578063666cab8d14610439578063704b6c021461044e57600080fd5b8063181f5a771161016b578063181f5a77146103525780631ef381741461039b578063546719cd146103b057600080fd5b806306285c6914610187578063142a98fc14610332575b600080fd5b61031c6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516103299190613e82565b60405180910390f35b610345610340366004613f18565b61062f565b6040516103299190613f78565b61038e6040518060400160405280601881526020017f45564d3245564d4f666652616d7020312e352e302d646576000000000000000081525081565b6040516103299190613fd6565b6103ae6103a93660046141ff565b6106aa565b005b6103b8610a9e565b604051610329919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b6002546001600160a01b03165b6040516001600160a01b039091168152602001610329565b610441610b53565b6040516103299190614311565b6103ae61045c366004614324565b610bb5565b6103ae61046f366004614784565b610c7e565b61050a6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff8082168352640100000000820416602083015268010000000000000000810461ffff16928201929092526a01000000000000000000009091046001600160a01b039081166060830152600b5416608082015290565b604051610329919061483f565b6103ae610d70565b6007546005546040805163ffffffff80851682526401000000009094049093166020840152820152606001610329565b6103ae610182366004614895565b61057061056b366004614324565b610e53565b60405167ffffffffffffffff9091168152602001610329565b6103ae610597366004614961565b610f56565b6000546001600160a01b0316610421565b604080516001815260006020820181905291810191909152606001610329565b6103ae6105db366004614a0a565b611124565b6103ae6105ee366004614b0f565b61132f565b6105fb61139a565b604051610329929190614b7d565b6103ae610617366004614324565b6114c0565b6103ae61062a366004614ba2565b6114d1565b600061063d60016004614c2b565b600261064a608085614c6d565b67ffffffffffffffff1661065e9190614c94565b6010600061066d608087614cab565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c1660038111156106a4576106a4613f35565b92915050565b84518460ff16601f8211156106f75760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cd2565b60405180910390fd5b806000036107345760006040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cd2565b61073c611771565b610745856117e7565b60095460005b818110156107bc57600860006009838154811061076a5761076a614cec565b60009182526020808320909101546001600160a01b03168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560010161074b565b5050865160005b8181101561095f5760008982815181106107df576107df614cec565b60200260200101519050600060028111156107fc576107fc613f35565b6001600160a01b038216600090815260086020526040902054610100900460ff16600281111561082e5761082e613f35565b146108685760026040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cd2565b6001600160a01b0381166108a8576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff8316815260208101600290526001600160a01b03821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000161761010083600281111561094b5761094b613f35565b0217905550905050508060010190506107c3565b5087516109739060099060208b0190613df0565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908a1617179055600780546109f99146913091906000906109cb9063ffffffff16614d1b565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168c8c8c8c8c8c611ab1565b6005819055600780544363ffffffff9081166401000000009081027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff841681179094556040519083048216947f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0594610a8a9487949293918316921691909117908f908f908f908f908f908f90614d3e565b60405180910390a150505050505050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610b4e90611b3e565b905090565b60606009805480602002602001604051908101604052809291908181526020018280548015610bab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b8d575b5050505050905090565b6000546001600160a01b03163314801590610bdb57506002546001600160a01b03163314155b15610c12576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b610c86611bf0565b81515181518114610cc3576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610d60576000838281518110610ce257610ce2614cec565b6020026020010151905080600014610d57578451805183908110610d0857610d08614cec565b602002602001015160800151811015610d57576040517f085e39cf00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016106ee565b50600101610cc6565b50610d6b8383611c71565b505050565b6001546001600160a01b03163314610de4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016106ee565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b0381166000908152600f602052604081205467ffffffffffffffff168082036106a4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156106a4576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f9190614dd4565b9392505050565b610f5e611771565b60005b825181101561103157610f9b838281518110610f7f57610f7f614cec565b602002602001015160200151600c61269d90919063ffffffff16565b15611029577fcbf3cbeaed4ac1d605ed30f4af06c35acaeff2379db7f6146c9cceee83d58782838281518110610fd357610fd3614cec565b602002602001015160000151848381518110610ff157610ff1614cec565b6020026020010151602001516040516110209291906001600160a01b0392831681529116602082015260400190565b60405180910390a15b600101610f61565b5060005b8151811015610d6b5761108e82828151811061105357611053614cec565b60200260200101516020015183838151811061107157611071614cec565b602002602001015160000151600c6126b29092919063ffffffff16565b1561111c577ffc23abf7ddbd3c02b1420dafa2355c56c1a06fbb8723862ac14d6bd74177361a8282815181106110c6576110c6614cec565b6020026020010151600001518383815181106110e4576110e4614cec565b6020026020010151602001516040516111139291906001600160a01b0392831681529116602082015260400190565b60405180910390a15b600101611035565b61112e87876126d0565b600554883590808214611177576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016106ee565b61117f611bf0565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561120757611207613f35565b600281111561121857611218613f35565b905250905060028160200151600281111561123557611235613f35565b14801561126f57506009816000015160ff168154811061125757611257614cec565b6000918252602090912001546001600160a01b031633145b6112a5576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060006112b3856020614c94565b6112be886020614c94565b6112ca8b610144614df1565b6112d49190614df1565b6112de9190614df1565b9050368114611322576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016106ee565b5050505050505050505050565b6000546001600160a01b0316331480159061135557506002546001600160a01b03163314155b1561138c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113976003826126f7565b50565b60608060006113a9600c6128dc565b90508067ffffffffffffffff8111156113c4576113c4613fe9565b6040519080825280602002602001820160405280156113ed578160200160208202803683370190505b5092508067ffffffffffffffff81111561140957611409613fe9565b604051908082528060200260200182016040528015611432578160200160208202803683370190505b50915060005b818110156114ba5760008061144e600c846128e7565b915091508086848151811061146557611465614cec565b60200260200101906001600160a01b031690816001600160a01b0316815250508185848151811061149857611498614cec565b6001600160a01b03909216602092830291909101909101525050600101611438565b50509091565b6114c8611771565b61139781612905565b33301461150a576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611547565b60408051808201909152600080825260208201528152602001906001900390816115205790505b5061014084015151909150156115a7576115a4836101400151846020015160405160200161158491906001600160a01b0391909116815260200190565b6040516020818303038152906040528560400151866101600151866129e0565b90505b610120830151511580156115bd57506080830151155b806115d4575060408301516001600160a01b03163b155b8061161457506040830151611612906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612b11565b155b1561161e57505050565b600080600a600001600a9054906101000a90046001600160a01b03166001600160a01b0316633cf979836040518060a001604052808861018001518152602001886000015167ffffffffffffffff168152602001886020015160405160200161169691906001600160a01b0391909116815260200190565b6040516020818303038152906040528152602001886101200151815260200186815250611388886080015189604001516040518563ffffffff1660e01b81526004016116e59493929190614e49565b6000604051808303816000875af1158015611704573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261172c9190810190614f53565b50915091508161176a57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b5050505050565b6000546001600160a01b031633146117e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016106ee565b565b6000818060200190518101906117fd9190614fc1565b60608101519091506001600160a01b0316611844576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015160408087015160608089015163ffffffff9889167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909716969096176401000000009890941697909702929092177fffff00000000000000000000000000000000000000000000ffffffffffffffff166801000000000000000061ffff909316929092027fffff0000000000000000000000000000000000000000ffffffffffffffffffff16919091176a01000000000000000000006001600160a01b039485160217909355608080860151600b80547fffffffffffffffffffffffff000000000000000000000000000000000000000016918516919091179055835160e0810185527f0000000000000000000000000000000000000000000000000000000000000000841681527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff908116938201939093527f0000000000000000000000000000000000000000000000000000000000000000909216828501527f00000000000000000000000000000000000000000000000000000000000000008316948201949094527f00000000000000000000000000000000000000000000000000000000000000008216938101939093527f0000000000000000000000000000000000000000000000000000000000000000811660a08401527f00000000000000000000000000000000000000000000000000000000000000001660c0830152517f7879e20bb60a503429de4a2c912b5904f08a39f2af054c10fb46434b5d61126091611aa591849061505c565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a604051602001611ad59998979695949392919061511e565b60408051601f1981840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611bcc82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611bb09190614c2b565b85608001516fffffffffffffffffffffffffffffffff16612b2d565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b467f0000000000000000000000000000000000000000000000000000000000000000146117e5576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016106ee565b6040517f2cbc26bb0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060801b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015611d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4f91906151a6565b15611d86576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516000819003611dc3576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151518114611e01576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115611e1c57611e1c613fe9565b604051908082528060200260200182016040528015611e45578160200160208202803683370190505b50905060005b82811015611f1d57600085600001518281518110611e6b57611e6b614cec565b60200260200101519050611e9f817f0000000000000000000000000000000000000000000000000000000000000000612b4c565b838381518110611eb157611eb1614cec565b602002602001018181525050806101800151838381518110611ed557611ed5614cec565b602002602001015114611f14576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600101611e4b565b50604080850151606086015191517f320488750000000000000000000000000000000000000000000000000000000081526000926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692633204887592611f91928792916004016151f4565b602060405180830381865afa158015611fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd2919061522a565b90508060000361200e576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b848110156126945760008760000151828151811061203557612035614cec565b60200260200101519050600061204e826060015161062f565b9050600081600381111561206457612064613f35565b14806120815750600381600381111561207f5761207f613f35565b145b6120c757816060015167ffffffffffffffff167fe3dd0bec917c965a133ddb2c84874725ee1e2fd8d763c19efa36d6a11cd82b1f60405160405180910390a2505061268c565b831561218457600a5460009063ffffffff166120e38742614c2b565b11905080806121035750600382600381111561210157612101613f35565b145b612139576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061214b5761214b614cec565b602002602001015160001461217e5788848151811061216c5761216c614cec565b60200260200101518360800181815250505b506121e7565b600081600381111561219857612198613f35565b146121e757606082015160405167ffffffffffffffff90911681527f67d9ba0f63d427c482c2736300e6d5a34c6691dbcdea8ad35828a1f1ba47e8729060200160405180910390a1505061268c565b60c082015167ffffffffffffffff1615612466576020808301516001600160a01b03166000908152600f909152604081205467ffffffffffffffff16908190036123d1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156123d15760208301516040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa1580156122e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123049190614dd4565b60c084015190915067ffffffffffffffff16612321826001615243565b67ffffffffffffffff16146123815782602001516001600160a01b03168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a350505061268c565b6020838101516001600160a01b03166000908152600f9091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b60008260038111156123e5576123e5613f35565b036124645760c083015167ffffffffffffffff16612404826001615243565b67ffffffffffffffff16146124645782602001516001600160a01b03168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a350505061268c565b505b60008960200151848151811061247e5761247e614cec565b602002602001015190506124aa8360600151846000015185610140015151866101200151518551612ca7565b6124b983606001516001612e21565b6000806124c68584612ecb565b915091506124d8856060015183612e21565b86156125445760038260038111156124f2576124f2613f35565b0361254457600084600381111561250b5761250b613f35565b1461254457806040517fcf19edfd0000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b600282600381111561255857612558613f35565b146125b057600382600381111561257157612571613f35565b146125b0578460600151826040517f9e2616030000000000000000000000000000000000000000000000000000000081526004016106ee929190615264565b60c085015167ffffffffffffffff16156126385760008460038111156125d8576125d8613f35565b03612638576020808601516001600160a01b03166000908152600f90915260408120805467ffffffffffffffff169161261083615282565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b846101800151856060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef65848460405161267e92919061529f565b60405180910390a350505050505b600101612015565b50505050505050565b6000610f4f836001600160a01b038416612f94565b60006126c8846001600160a01b03851684612fa0565b949350505050565b6126f36126df828401846152bf565b604080516000815260208101909152611c71565b5050565b815460009061272090700100000000000000000000000000000000900463ffffffff1642614c2b565b905080156127c25760018301548354612768916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b2d565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546127e8916fffffffffffffffffffffffffffffffff9081169116612fb6565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906128cf9084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b60006106a482612fcc565b60008080806128f68686612fd7565b909450925050505b9250929050565b336001600160a01b03821603612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016106ee565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b846000805b8751811015612af657612a5d888281518110612a0357612a03614cec565b6020026020010151602001518888888581518110612a2357612a23614cec565b6020026020010151806020019051810190612a3e91906152f4565b888681518110612a5057612a50614cec565b6020026020010151612fe6565b838281518110612a6f57612a6f614cec565b6020026020010181905250612aab838281518110612a8f57612a8f614cec565b602002602001015160000151600c6133e690919063ffffffff16565b15612aee57612ae1838281518110612ac557612ac5614cec565b6020908102919091010151600b546001600160a01b03166133fb565b612aeb9083614df1565b91505b6001016129e5565b508015612b0657612b068161351c565b505b95945050505050565b6000612b1c83613529565b8015610f4f5750610f4f838361358d565b6000612b0885612b3d8486614c94565b612b479087614df1565b612fb6565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b6101000151604051602001612be29897969594939291906001600160a01b039889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b6040516020818303038152906040528051906020012085610120015180519060200120866101400151604051602001612c1b91906153ba565b60405160208183030381529060405280519060200120876101600151604051602001612c479190615427565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168467ffffffffffffffff1614612d20576040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016106ee565b600a5468010000000000000000900461ffff16831115612d78576040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016106ee565b808314612dbd576040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016106ee565b600a54640100000000900463ffffffff1682111561176a57600a546040517f8693378900000000000000000000000000000000000000000000000000000000815264010000000090910463ffffffff166004820152602481018390526044016106ee565b60006002612e30608085614c6d565b67ffffffffffffffff16612e449190614c94565b90506000601081612e56608087614cab565b67ffffffffffffffff168152602081019190915260400160002054905081612e8060016004614c2b565b901b191681836003811115612e9757612e97613f35565b901b178060106000612eaa608088614cab565b67ffffffffffffffff16815260208101919091526040016000205550505050565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a590612f0f908790879060040161543a565b600060405180830381600087803b158015612f2957600080fd5b505af1925050508015612f3a575060015b612f79573d808015612f68576040519150601f19603f3d011682016040523d82523d6000602084013e612f6d565b606091505b506003925090506128fe565b50506040805160208101909152600081526002909250929050565b6000610f4f838361365c565b60006126c884846001600160a01b038516613679565b6000818310612fc55781610f4f565b5090919050565b60006106a482613696565b60008080806128f686866136a1565b6040805180820190915260008082526020820152600061300984602001516136cc565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa15801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b2919061559d565b90506001600160a01b03811615806130fa57506130f86001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612b11565b155b1561313c576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016106ee565b60008060006132416040518061010001604052808c81526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020018b6001600160a01b031681526020018d8152602001876001600160a01b031681526020018a6000015181526020018a604001518152602001898152506040516024016131d291906155ba565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f390775370000000000000000000000000000000000000000000000000000000017905260608a0151869063ffffffff166113886084613772565b9250925092508261328057816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b81516020146132c85781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016106ee565b6000828060200190518101906132de919061522a565b6040516001600160a01b038c1660248201526044810182905290915061337b9060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260608b0151889061337190869063ffffffff16614c2b565b6113886084613772565b509094509250836133ba57826040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b604080518082019091526001600160a01b03909616865260208601525092935050505095945050505050565b6000610f4f836001600160a01b038416613898565b81516040517fd02641a00000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009182919084169063d02641a0906024016040805180830381865afa158015613461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134859190615691565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036134ee5783516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016106ee565b60208401516126c8907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316906138a4565b61139760038260006138e1565b6000613555827f01ffc9a70000000000000000000000000000000000000000000000000000000061358d565b80156106a45750613586827fffffffff0000000000000000000000000000000000000000000000000000000061358d565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613645575060208210155b80156136515750600081115b979650505050505050565b60008181526002830160205260408120819055610f4f8383613c30565b600082815260028401602052604081208290556126c88484613c3c565b60006106a482613c48565b600080806136af8585613c52565b600081815260029690960160205260409095205494959350505050565b6000815160201461370b57816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b600082806020019051810190613721919061522a565b90506001600160a01b03811180613739575061040081105b156106a457826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106ee9190613fd6565b6000606060008361ffff1667ffffffffffffffff81111561379557613795613fe9565b6040519080825280601f01601f1916602001820160405280156137bf576020820181803683370190505b509150863b6137f2577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613825577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b859003604081048103871061385e577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156138815750835b808352806000602085013e50955095509592505050565b6000610f4f8383613c5e565b6000670de0b6b3a76400006138d7837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616614c94565b610f4f91906156f1565b825474010000000000000000000000000000000000000000900460ff161580613908575081155b1561391257505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061395890700100000000000000000000000000000000900463ffffffff1642614c2b565b90508015613a18578183111561399a576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546139d49083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b2d565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015613ab5576001600160a01b038416613a6a576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016106ee565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b03851660448201526064016106ee565b84831015613bae5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290613af99082614c2b565b613b03878a614c2b565b613b0d9190614df1565b613b1791906156f1565b90506001600160a01b038616613b63576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016106ee565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b03871660448201526064016106ee565b613bb88584614c2b565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6000610f4f8383613c7d565b6000610f4f8383613d77565b60006106a4825490565b6000610f4f8383613dc6565b6000610f4f838360008181526001830160205260408120541515610f4f565b60008181526001830160205260408120548015613d66576000613ca1600183614c2b565b8554909150600090613cb590600190614c2b565b9050818114613d1a576000866000018281548110613cd557613cd5614cec565b9060005260206000200154905080876000018481548110613cf857613cf8614cec565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d2b57613d2b615705565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106a4565b60009150506106a4565b5092915050565b6000818152600183016020526040812054613dbe575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106a4565b5060006106a4565b6000826000018281548110613ddd57613ddd614cec565b9060005260206000200154905092915050565b828054828255906000526020600020908101928215613e5d579160200282015b82811115613e5d57825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190613e10565b50613e69929150613e6d565b5090565b5b80821115613e695760008155600101613e6e565b60e081016106a482846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b67ffffffffffffffff8116811461139757600080fd5b8035613f1381613ef2565b919050565b600060208284031215613f2a57600080fd5b8135610f4f81613ef2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613f7457613f74613f35565b9052565b602081016106a48284613f64565b60005b83811015613fa1578181015183820152602001613f89565b50506000910152565b60008151808452613fc2816020860160208601613f86565b601f01601f19169290920160200192915050565b602081526000610f4f6020830184613faa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561403b5761403b613fe9565b60405290565b6040516101a0810167ffffffffffffffff8111828210171561403b5761403b613fe9565b6040516080810167ffffffffffffffff8111828210171561403b5761403b613fe9565b604051601f8201601f1916810167ffffffffffffffff811182821017156140b1576140b1613fe9565b604052919050565b600067ffffffffffffffff8211156140d3576140d3613fe9565b5060051b60200190565b6001600160a01b038116811461139757600080fd5b8035613f13816140dd565b600082601f83011261410e57600080fd5b8135602061412361411e836140b9565b614088565b8083825260208201915060208460051b87010193508684111561414557600080fd5b602086015b8481101561416a57803561415d816140dd565b835291830191830161414a565b509695505050505050565b803560ff81168114613f1357600080fd5b600067ffffffffffffffff8211156141a0576141a0613fe9565b50601f01601f191660200190565b600082601f8301126141bf57600080fd5b81356141cd61411e82614186565b8181528460208386010111156141e257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561421857600080fd5b863567ffffffffffffffff8082111561423057600080fd5b61423c8a838b016140fd565b9750602089013591508082111561425257600080fd5b61425e8a838b016140fd565b965061426c60408a01614175565b9550606089013591508082111561428257600080fd5b61428e8a838b016141ae565b945061429c60808a01613f08565b935060a08901359150808211156142b257600080fd5b506142bf89828a016141ae565b9150509295509295509295565b60008151808452602080850194506020840160005b838110156143065781516001600160a01b0316875295820195908201906001016142e1565b509495945050505050565b602081526000610f4f60208301846142cc565b60006020828403121561433657600080fd5b8135610f4f816140dd565b801515811461139757600080fd5b8035613f1381614341565b600082601f83011261436b57600080fd5b8135602061437b61411e836140b9565b82815260069290921b8401810191818101908684111561439a57600080fd5b8286015b8481101561416a57604081890312156143b75760008081fd5b6143bf614018565b81356143ca816140dd565b8152818501358582015283529183019160400161439e565b600082601f8301126143f357600080fd5b8135602061440361411e836140b9565b82815260059290921b8401810191818101908684111561442257600080fd5b8286015b8481101561416a57803567ffffffffffffffff8111156144465760008081fd5b6144548986838b01016141ae565b845250918301918301614426565b60006101a0828403121561447557600080fd5b61447d614041565b905061448882613f08565b8152614496602083016140f2565b60208201526144a7604083016140f2565b60408201526144b860608301613f08565b6060820152608082013560808201526144d360a0830161434f565b60a08201526144e460c08301613f08565b60c08201526144f560e083016140f2565b60e082015261010082810135908201526101208083013567ffffffffffffffff8082111561452257600080fd5b61452e868387016141ae565b8385015261014092508285013591508082111561454a57600080fd5b6145568683870161435a565b8385015261016092508285013591508082111561457257600080fd5b5061457f858286016143e2565b82840152505061018080830135818301525092915050565b600082601f8301126145a857600080fd5b813560206145b861411e836140b9565b82815260059290921b840181019181810190868411156145d757600080fd5b8286015b8481101561416a57803567ffffffffffffffff8111156145fb5760008081fd5b6146098986838b01016143e2565b8452509183019183016145db565b600082601f83011261462857600080fd5b8135602061463861411e836140b9565b8083825260208201915060208460051b87010193508684111561465a57600080fd5b602086015b8481101561416a578035835291830191830161465f565b60006080828403121561468857600080fd5b614690614065565b9050813567ffffffffffffffff808211156146aa57600080fd5b818401915084601f8301126146be57600080fd5b813560206146ce61411e836140b9565b82815260059290921b840181019181810190888411156146ed57600080fd5b8286015b84811015614725578035868111156147095760008081fd5b6147178b86838b0101614462565b8452509183019183016146f1565b508652508581013593508284111561473c57600080fd5b61474887858801614597565b9085015250604084013591508082111561476157600080fd5b5061476e84828501614617565b6040830152506060820135606082015292915050565b6000806040838503121561479757600080fd5b823567ffffffffffffffff808211156147af57600080fd5b6147bb86838701614676565b93506020915081850135818111156147d257600080fd5b85019050601f810186136147e557600080fd5b80356147f361411e826140b9565b81815260059190911b8201830190838101908883111561481257600080fd5b928401925b8284101561483057833582529284019290840190614817565b80955050505050509250929050565b60a081016106a4828463ffffffff8082511683528060208301511660208401525061ffff604082015116604083015260608101516001600160a01b03808216606085015280608084015116608085015250505050565b6000602082840312156148a757600080fd5b813567ffffffffffffffff8111156148be57600080fd5b820160a08185031215610f4f57600080fd5b600082601f8301126148e157600080fd5b813560206148f161411e836140b9565b82815260069290921b8401810191818101908684111561491057600080fd5b8286015b8481101561416a576040818903121561492d5760008081fd5b614935614018565b8135614940816140dd565b81528185013561494f816140dd565b81860152835291830191604001614914565b6000806040838503121561497457600080fd5b823567ffffffffffffffff8082111561498c57600080fd5b614998868387016148d0565b935060208501359150808211156149ae57600080fd5b506149bb858286016148d0565b9150509250929050565b60008083601f8401126149d757600080fd5b50813567ffffffffffffffff8111156149ef57600080fd5b6020830191508360208260051b85010111156128fe57600080fd5b60008060008060008060008060e0898b031215614a2657600080fd5b606089018a811115614a3757600080fd5b8998503567ffffffffffffffff80821115614a5157600080fd5b818b0191508b601f830112614a6557600080fd5b813581811115614a7457600080fd5b8c6020828501011115614a8657600080fd5b6020830199508098505060808b0135915080821115614aa457600080fd5b614ab08c838d016149c5565b909750955060a08b0135915080821115614ac957600080fd5b50614ad68b828c016149c5565b999c989b50969995989497949560c00135949350505050565b80356fffffffffffffffffffffffffffffffff81168114613f1357600080fd5b600060608284031215614b2157600080fd5b6040516060810181811067ffffffffffffffff82111715614b4457614b44613fe9565b6040528235614b5281614341565b8152614b6060208401614aef565b6020820152614b7160408401614aef565b60408201529392505050565b604081526000614b9060408301856142cc565b8281036020840152612b0881856142cc565b60008060408385031215614bb557600080fd5b823567ffffffffffffffff80821115614bcd57600080fd5b614bd986838701614462565b93506020850135915080821115614bef57600080fd5b506149bb858286016143e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106a4576106a4614bfc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680614c8857614c88614c3e565b92169190910692915050565b80820281158282048414176106a4576106a4614bfc565b600067ffffffffffffffff80841680614cc657614cc6614c3e565b92169190910492915050565b6020810160038310614ce657614ce6613f35565b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818103614d3457614d34614bfc565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b16604085015250806060840152614d6e8184018a6142cc565b90508281036080840152614d8281896142cc565b905060ff871660a084015282810360c0840152614d9f8187613faa565b905067ffffffffffffffff851660e0840152828103610100840152614dc48185613faa565b9c9b505050505050505050505050565b600060208284031215614de657600080fd5b8151610f4f81613ef2565b808201808211156106a4576106a4614bfc565b60008151808452602080850194506020840160005b8381101561430657815180516001600160a01b031688528301518388015260409096019590820190600101614e19565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152614e84610120840182613faa565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e0860152614ec08383613faa565b925060808901519150808584030161010086015250614edf8282614e04565b92505050614ef3602083018661ffff169052565b836040830152612b0860608301846001600160a01b03169052565b600082601f830112614f1f57600080fd5b8151614f2d61411e82614186565b818152846020838601011115614f4257600080fd5b6126c8826020830160208701613f86565b600080600060608486031215614f6857600080fd5b8351614f7381614341565b602085015190935067ffffffffffffffff811115614f9057600080fd5b614f9c86828701614f0e565b925050604084015190509250925092565b805163ffffffff81168114613f1357600080fd5b600060a08284031215614fd357600080fd5b60405160a0810181811067ffffffffffffffff82111715614ff657614ff6613fe9565b60405261500283614fad565b815261501060208401614fad565b6020820152604083015161ffff8116811461502a57600080fd5b6040820152606083015161503d816140dd565b60608201526080830151615050816140dd565b60808201529392505050565b61018081016150cd82856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b825163ffffffff90811660e0840152602084015116610100830152604083015161ffff1661012083015260608301516001600160a01b03908116610140840152608084015116610160830152610f4f565b60006101208b83526001600160a01b038b16602084015267ffffffffffffffff808b1660408501528160608501526151588285018b6142cc565b9150838203608085015261516c828a6142cc565b915060ff881660a085015283820360c08501526151898288613faa565b90861660e08501528381036101008501529050614dc48185613faa565b6000602082840312156151b857600080fd5b8151610f4f81614341565b60008151808452602080850194506020840160005b83811015614306578151875295820195908201906001016151d8565b60608152600061520760608301866151c3565b828103602084015261521981866151c3565b915050826040830152949350505050565b60006020828403121561523c57600080fd5b5051919050565b67ffffffffffffffff818116838216019080821115613d7057613d70614bfc565b67ffffffffffffffff8316815260408101610f4f6020830184613f64565b600067ffffffffffffffff808316818103614d3457614d34614bfc565b6152a98184613f64565b6040602082015260006126c86040830184613faa565b6000602082840312156152d157600080fd5b813567ffffffffffffffff8111156152e857600080fd5b6126c884828501614676565b60006020828403121561530657600080fd5b815167ffffffffffffffff8082111561531e57600080fd5b908301906080828603121561533257600080fd5b61533a614065565b82518281111561534957600080fd5b61535587828601614f0e565b82525060208301518281111561536a57600080fd5b61537687828601614f0e565b60208301525060408301518281111561538e57600080fd5b61539a87828601614f0e565b6040830152506153ac60608401614fad565b606082015295945050505050565b602081526000610f4f6020830184614e04565b60008282518085526020808601955060208260051b8401016020860160005b8481101561541a57601f19868403018952615408838351613faa565b988401989250908301906001016153ec565b5090979650505050505050565b602081526000610f4f60208301846153cd565b6040815261545560408201845167ffffffffffffffff169052565b6000602084015161547160608401826001600160a01b03169052565b5060408401516001600160a01b038116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c08401516101006154d28185018367ffffffffffffffff169052565b60e086015191506101206154f0818601846001600160a01b03169052565b81870151925061014091508282860152808701519250506101a061016081818701526155206101e0870185613faa565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc061018081888703018189015261555f8686614e04565b9550828a0151945081888703018489015261557a86866153cd565b9550808a01516101c089015250505050508281036020840152612b0881856153cd565b6000602082840312156155af57600080fd5b8151610f4f816140dd565b60208152600082516101008060208501526155d9610120850183613faa565b915060208501516155f6604086018267ffffffffffffffff169052565b5060408501516001600160a01b03811660608601525060608501516080850152608085015161563060a08601826001600160a01b03169052565b5060a0850151601f19808685030160c087015261564d8483613faa565b935060c08701519150808685030160e087015261566a8483613faa565b935060e08701519150808685030183870152506156878382613faa565b9695505050505050565b6000604082840312156156a357600080fd5b6156ab614018565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146156d757600080fd5b81526156e560208401614fad565b60208201529392505050565b60008261570057615700614c3e565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + Bin: "0x6101a06040523480156200001257600080fd5b5060405162005e1238038062005e128339810160408190526200003591620004ec565b8033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c081620002ca565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606080870182905298909601519091166080948501819052600380546001600160a01b031916909217600160801b9485021760ff60a01b1916600160a01b90930292909217905502909117600455469052508201516001600160a01b031615806200016f575081516001600160a01b0316155b8062000186575060c08201516001600160a01b0316155b15620001a5576040516342bcdf7f60e11b815260040160405180910390fd5b81600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e9190620005b5565b6001600160401b03166001146200023857604051636fc2a20760e11b815260040160405180910390fd5b81516001600160a01b0390811660a090815260408401516001600160401b0390811660c0908152602086015190911660e05260608501518316610100526080850151831661014052908401518216610160528301511661018052620002bd7f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b362000375565b6101205250620005da9050565b336001600160a01b03821603620003245760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e05161010051604051602001620003bf94939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b60405160e081016001600160401b03811182821017156200040d57634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200042b57600080fd5b919050565b80516001600160401b03811681146200042b57600080fd5b80516001600160801b03811681146200042b57600080fd5b6000606082840312156200047357600080fd5b604051606081016001600160401b0381118282101715620004a457634e487b7160e01b600052604160045260246000fd5b806040525080915082518015158114620004bd57600080fd5b8152620004cd6020840162000448565b6020820152620004e06040840162000448565b60408201525092915050565b6000808284036101408112156200050257600080fd5b60e08112156200051157600080fd5b506200051c620003dc565b620005278462000413565b8152620005376020850162000430565b60208201526200054a6040850162000430565b60408201526200055d6060850162000413565b6060820152620005706080850162000413565b60808201526200058360a0850162000413565b60a08201526200059660c0850162000413565b60c08201529150620005ac8460e0850162000460565b90509250929050565b600060208284031215620005c857600080fd5b620005d38262000430565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051615749620006c9600039600081816102ec01528181611a5201526130470152600081816102bd01528181611a2a0152611cdc01526000818161028e01528181610e7f01528181610ee401528181611a000152818161222d015261229701526000611e7b01526000818161025f01526119d60152600081816101ff015261197a01526000818161022f015281816119ae01528181611c9901528181612ca901526131580152600081816101d0015281816119550152611f5b015260008181611bf30152611c3f01526157496000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806381ff7048116100d8578063afcb95d71161008c578063f077b59211610066578063f077b592146105f3578063f2fde38b14610609578063f52121a51461061c57600080fd5b8063afcb95d7146105ad578063b1dc65a4146105cd578063c92b2832146105e057600080fd5b8063856c8247116100bd578063856c82471461055d578063873504d7146105895780638da5cb5b1461059c57600080fd5b806381ff70481461051f57806385572ffb1461054f57600080fd5b8063599f64311161013a578063740f415011610114578063740f4150146104615780637437ff9f1461047457806379ba50971461051757600080fd5b8063599f643114610414578063666cab8d14610439578063704b6c021461044e57600080fd5b8063181f5a771161016b578063181f5a77146103525780631ef381741461039b578063546719cd146103b057600080fd5b806306285c6914610187578063142a98fc14610332575b600080fd5b61031c6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516103299190613e8a565b60405180910390f35b610345610340366004613f20565b61062f565b6040516103299190613f80565b61038e6040518060400160405280601881526020017f45564d3245564d4f666652616d7020312e352e302d646576000000000000000081525081565b6040516103299190613fde565b6103ae6103a9366004614207565b6106aa565b005b6103b8610a9e565b604051610329919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b6002546001600160a01b03165b6040516001600160a01b039091168152602001610329565b610441610b53565b6040516103299190614319565b6103ae61045c36600461432c565b610bb5565b6103ae61046f36600461478c565b610c7e565b61050a6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff8082168352640100000000820416602083015268010000000000000000810461ffff16928201929092526a01000000000000000000009091046001600160a01b039081166060830152600b5416608082015290565b6040516103299190614847565b6103ae610d70565b6007546005546040805163ffffffff80851682526401000000009094049093166020840152820152606001610329565b6103ae61018236600461489d565b61057061056b36600461432c565b610e53565b60405167ffffffffffffffff9091168152602001610329565b6103ae610597366004614969565b610f56565b6000546001600160a01b0316610421565b604080516001815260006020820181905291810191909152606001610329565b6103ae6105db366004614a12565b611124565b6103ae6105ee366004614b17565b61132f565b6105fb61139a565b604051610329929190614b85565b6103ae61061736600461432c565b6114c0565b6103ae61062a366004614baa565b6114d1565b600061063d60016004614c33565b600261064a608085614c75565b67ffffffffffffffff1661065e9190614c9c565b6010600061066d608087614cb3565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c1660038111156106a4576106a4613f3d565b92915050565b84518460ff16601f8211156106f75760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cda565b60405180910390fd5b806000036107345760006040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cda565b61073c611771565b610745856117e7565b60095460005b818110156107bc57600860006009838154811061076a5761076a614cf4565b60009182526020808320909101546001600160a01b03168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560010161074b565b5050865160005b8181101561095f5760008982815181106107df576107df614cf4565b60200260200101519050600060028111156107fc576107fc613f3d565b6001600160a01b038216600090815260086020526040902054610100900460ff16600281111561082e5761082e613f3d565b146108685760026040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ee9190614cda565b6001600160a01b0381166108a8576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff8316815260208101600290526001600160a01b03821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000161761010083600281111561094b5761094b613f3d565b0217905550905050508060010190506107c3565b5087516109739060099060208b0190613df8565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908a1617179055600780546109f99146913091906000906109cb9063ffffffff16614d23565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168c8c8c8c8c8c611ab1565b6005819055600780544363ffffffff9081166401000000009081027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff841681179094556040519083048216947f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0594610a8a9487949293918316921691909117908f908f908f908f908f908f90614d46565b60405180910390a150505050505050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610b4e90611b3e565b905090565b60606009805480602002602001604051908101604052809291908181526020018280548015610bab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b8d575b5050505050905090565b6000546001600160a01b03163314801590610bdb57506002546001600160a01b03163314155b15610c12576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b610c86611bf0565b81515181518114610cc3576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610d60576000838281518110610ce257610ce2614cf4565b6020026020010151905080600014610d57578451805183908110610d0857610d08614cf4565b602002602001015160800151811015610d57576040517f085e39cf00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016106ee565b50600101610cc6565b50610d6b8383611c71565b505050565b6001546001600160a01b03163314610de4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016106ee565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b0381166000908152600f602052604081205467ffffffffffffffff168082036106a4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156106a4576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f9190614ddc565b9392505050565b610f5e611771565b60005b825181101561103157610f9b838281518110610f7f57610f7f614cf4565b602002602001015160200151600c61269d90919063ffffffff16565b15611029577fcbf3cbeaed4ac1d605ed30f4af06c35acaeff2379db7f6146c9cceee83d58782838281518110610fd357610fd3614cf4565b602002602001015160000151848381518110610ff157610ff1614cf4565b6020026020010151602001516040516110209291906001600160a01b0392831681529116602082015260400190565b60405180910390a15b600101610f61565b5060005b8151811015610d6b5761108e82828151811061105357611053614cf4565b60200260200101516020015183838151811061107157611071614cf4565b602002602001015160000151600c6126b29092919063ffffffff16565b1561111c577ffc23abf7ddbd3c02b1420dafa2355c56c1a06fbb8723862ac14d6bd74177361a8282815181106110c6576110c6614cf4565b6020026020010151600001518383815181106110e4576110e4614cf4565b6020026020010151602001516040516111139291906001600160a01b0392831681529116602082015260400190565b60405180910390a15b600101611035565b61112e87876126d0565b600554883590808214611177576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016106ee565b61117f611bf0565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561120757611207613f3d565b600281111561121857611218613f3d565b905250905060028160200151600281111561123557611235613f3d565b14801561126f57506009816000015160ff168154811061125757611257614cf4565b6000918252602090912001546001600160a01b031633145b6112a5576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060006112b3856020614c9c565b6112be886020614c9c565b6112ca8b610144614df9565b6112d49190614df9565b6112de9190614df9565b9050368114611322576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016106ee565b5050505050505050505050565b6000546001600160a01b0316331480159061135557506002546001600160a01b03163314155b1561138c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113976003826126f7565b50565b60608060006113a9600c6128dc565b90508067ffffffffffffffff8111156113c4576113c4613ff1565b6040519080825280602002602001820160405280156113ed578160200160208202803683370190505b5092508067ffffffffffffffff81111561140957611409613ff1565b604051908082528060200260200182016040528015611432578160200160208202803683370190505b50915060005b818110156114ba5760008061144e600c846128e7565b915091508086848151811061146557611465614cf4565b60200260200101906001600160a01b031690816001600160a01b0316815250508185848151811061149857611498614cf4565b6001600160a01b03909216602092830291909101909101525050600101611438565b50509091565b6114c8611771565b61139781612905565b33301461150a576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611547565b60408051808201909152600080825260208201528152602001906001900390816115205790505b5061014084015151909150156115a7576115a4836101400151846020015160405160200161158491906001600160a01b0391909116815260200190565b6040516020818303038152906040528560400151866101600151866129e0565b90505b610120830151511580156115bd57506080830151155b806115d4575060408301516001600160a01b03163b155b8061161457506040830151611612906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000612b11565b155b1561161e57505050565b600080600a600001600a9054906101000a90046001600160a01b03166001600160a01b0316633cf979836040518060a001604052808861018001518152602001886000015167ffffffffffffffff168152602001886020015160405160200161169691906001600160a01b0391909116815260200190565b6040516020818303038152906040528152602001886101200151815260200186815250611388886080015189604001516040518563ffffffff1660e01b81526004016116e59493929190614e51565b6000604051808303816000875af1158015611704573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261172c9190810190614f5b565b50915091508161176a57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b5050505050565b6000546001600160a01b031633146117e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016106ee565b565b6000818060200190518101906117fd9190614fc9565b60608101519091506001600160a01b0316611844576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015160408087015160608089015163ffffffff9889167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909716969096176401000000009890941697909702929092177fffff00000000000000000000000000000000000000000000ffffffffffffffff166801000000000000000061ffff909316929092027fffff0000000000000000000000000000000000000000ffffffffffffffffffff16919091176a01000000000000000000006001600160a01b039485160217909355608080860151600b80547fffffffffffffffffffffffff000000000000000000000000000000000000000016918516919091179055835160e0810185527f0000000000000000000000000000000000000000000000000000000000000000841681527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff908116938201939093527f0000000000000000000000000000000000000000000000000000000000000000909216828501527f00000000000000000000000000000000000000000000000000000000000000008316948201949094527f00000000000000000000000000000000000000000000000000000000000000008216938101939093527f0000000000000000000000000000000000000000000000000000000000000000811660a08401527f00000000000000000000000000000000000000000000000000000000000000001660c0830152517f7879e20bb60a503429de4a2c912b5904f08a39f2af054c10fb46434b5d61126091611aa5918490615064565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a604051602001611ad599989796959493929190615126565b60408051601f1981840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611bcc82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611bb09190614c33565b85608001516fffffffffffffffffffffffffffffffff16612b2d565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b467f0000000000000000000000000000000000000000000000000000000000000000146117e5576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016106ee565b6040517f2cbc26bb0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060801b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015611d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4f91906151ae565b15611d86576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516000819003611dc3576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151518114611e01576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115611e1c57611e1c613ff1565b604051908082528060200260200182016040528015611e45578160200160208202803683370190505b50905060005b82811015611f1d57600085600001518281518110611e6b57611e6b614cf4565b60200260200101519050611e9f817f0000000000000000000000000000000000000000000000000000000000000000612b4c565b838381518110611eb157611eb1614cf4565b602002602001018181525050806101800151838381518110611ed557611ed5614cf4565b602002602001015114611f14576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600101611e4b565b50604080850151606086015191517f320488750000000000000000000000000000000000000000000000000000000081526000926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692633204887592611f91928792916004016151fc565b602060405180830381865afa158015611fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd29190615232565b90508060000361200e576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b848110156126945760008760000151828151811061203557612035614cf4565b60200260200101519050600061204e826060015161062f565b9050600081600381111561206457612064613f3d565b14806120815750600381600381111561207f5761207f613f3d565b145b6120c757816060015167ffffffffffffffff167fe3dd0bec917c965a133ddb2c84874725ee1e2fd8d763c19efa36d6a11cd82b1f60405160405180910390a2505061268c565b831561218457600a5460009063ffffffff166120e38742614c33565b11905080806121035750600382600381111561210157612101613f3d565b145b612139576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061214b5761214b614cf4565b602002602001015160001461217e5788848151811061216c5761216c614cf4565b60200260200101518360800181815250505b506121e7565b600081600381111561219857612198613f3d565b146121e757606082015160405167ffffffffffffffff90911681527f67d9ba0f63d427c482c2736300e6d5a34c6691dbcdea8ad35828a1f1ba47e8729060200160405180910390a1505061268c565b60c082015167ffffffffffffffff1615612466576020808301516001600160a01b03166000908152600f909152604081205467ffffffffffffffff16908190036123d1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156123d15760208301516040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa1580156122e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123049190614ddc565b60c084015190915067ffffffffffffffff1661232182600161524b565b67ffffffffffffffff16146123815782602001516001600160a01b03168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a350505061268c565b6020838101516001600160a01b03166000908152600f9091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b60008260038111156123e5576123e5613f3d565b036124645760c083015167ffffffffffffffff1661240482600161524b565b67ffffffffffffffff16146124645782602001516001600160a01b03168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a350505061268c565b505b60008960200151848151811061247e5761247e614cf4565b602002602001015190506124aa8360600151846000015185610140015151866101200151518551612ca7565b6124b983606001516001612e21565b6000806124c68584612ecb565b915091506124d8856060015183612e21565b86156125445760038260038111156124f2576124f2613f3d565b0361254457600084600381111561250b5761250b613f3d565b1461254457806040517fcf19edfd0000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b600282600381111561255857612558613f3d565b146125b057600382600381111561257157612571613f3d565b146125b0578460600151826040517f9e2616030000000000000000000000000000000000000000000000000000000081526004016106ee92919061526c565b60c085015167ffffffffffffffff16156126385760008460038111156125d8576125d8613f3d565b03612638576020808601516001600160a01b03166000908152600f90915260408120805467ffffffffffffffff16916126108361528a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b846101800151856060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef65848460405161267e9291906152a7565b60405180910390a350505050505b600101612015565b50505050505050565b6000610f4f836001600160a01b038416612f94565b60006126c8846001600160a01b03851684612fa0565b949350505050565b6126f36126df828401846152c7565b604080516000815260208101909152611c71565b5050565b815460009061272090700100000000000000000000000000000000900463ffffffff1642614c33565b905080156127c25760018301548354612768916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b2d565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546127e8916fffffffffffffffffffffffffffffffff9081169116612fb6565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906128cf9084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b60006106a482612fcc565b60008080806128f68686612fd7565b909450925050505b9250929050565b336001600160a01b03821603612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016106ee565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b846000805b8751811015612af657612a5d888281518110612a0357612a03614cf4565b6020026020010151602001518888888581518110612a2357612a23614cf4565b6020026020010151806020019051810190612a3e91906152fc565b888681518110612a5057612a50614cf4565b6020026020010151612fe6565b838281518110612a6f57612a6f614cf4565b6020026020010181905250612aab838281518110612a8f57612a8f614cf4565b602002602001015160000151600c6133ee90919063ffffffff16565b15612aee57612ae1838281518110612ac557612ac5614cf4565b6020908102919091010151600b546001600160a01b0316613403565b612aeb9083614df9565b91505b6001016129e5565b508015612b0657612b0681613524565b505b95945050505050565b6000612b1c83613531565b8015610f4f5750610f4f8383613595565b6000612b0885612b3d8486614c9c565b612b479087614df9565b612fb6565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b6101000151604051602001612be29897969594939291906001600160a01b039889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b6040516020818303038152906040528051906020012085610120015180519060200120866101400151604051602001612c1b91906153c2565b60405160208183030381529060405280519060200120876101600151604051602001612c47919061542f565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168467ffffffffffffffff1614612d20576040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016106ee565b600a5468010000000000000000900461ffff16831115612d78576040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016106ee565b808314612dbd576040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016106ee565b600a54640100000000900463ffffffff1682111561176a57600a546040517f8693378900000000000000000000000000000000000000000000000000000000815264010000000090910463ffffffff166004820152602481018390526044016106ee565b60006002612e30608085614c75565b67ffffffffffffffff16612e449190614c9c565b90506000601081612e56608087614cb3565b67ffffffffffffffff168152602081019190915260400160002054905081612e8060016004614c33565b901b191681836003811115612e9757612e97613f3d565b901b178060106000612eaa608088614cb3565b67ffffffffffffffff16815260208101919091526040016000205550505050565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a590612f0f9087908790600401615442565b600060405180830381600087803b158015612f2957600080fd5b505af1925050508015612f3a575060015b612f79573d808015612f68576040519150601f19603f3d011682016040523d82523d6000602084013e612f6d565b606091505b506003925090506128fe565b50506040805160208101909152600081526002909250929050565b6000610f4f8383613664565b60006126c884846001600160a01b038516613681565b6000818310612fc55781610f4f565b5090919050565b60006106a48261369e565b60008080806128f686866136a9565b6040805180820190915260008082526020820152600061300984602001516136d4565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa15801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b291906155a5565b90506001600160a01b03811615806130fa57506130f86001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000612b11565b155b1561313c576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016106ee565b60008060006132416040518061010001604052808c81526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020018b6001600160a01b031681526020018d8152602001876001600160a01b031681526020018a6000015181526020018a604001518152602001898152506040516024016131d291906155c2565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f390775370000000000000000000000000000000000000000000000000000000017905260608a0151869063ffffffff16611388608461377a565b9250925092508261328057816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b81516020146132c85781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016106ee565b6000828060200190518101906132de9190615232565b6040516001600160a01b0380881660248301528c166044820152606481018290529091506133839060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905260608b0151889061337990869063ffffffff16614c33565b611388608461377a565b509094509250836133c257826040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b604080518082019091526001600160a01b03909616865260208601525092935050505095945050505050565b6000610f4f836001600160a01b0384166138a0565b81516040517fd02641a00000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009182919084169063d02641a0906024016040805180830381865afa158015613469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348d9190615699565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036134f65783516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016106ee565b60208401516126c8907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316906138ac565b61139760038260006138e9565b600061355d827f01ffc9a700000000000000000000000000000000000000000000000000000000613595565b80156106a4575061358e827fffffffff00000000000000000000000000000000000000000000000000000000613595565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561364d575060208210155b80156136595750600081115b979650505050505050565b60008181526002830160205260408120819055610f4f8383613c38565b600082815260028401602052604081208290556126c88484613c44565b60006106a482613c50565b600080806136b78585613c5a565b600081815260029690960160205260409095205494959350505050565b6000815160201461371357816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b6000828060200190518101906137299190615232565b90506001600160a01b03811180613741575061040081105b156106a457826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106ee9190613fde565b6000606060008361ffff1667ffffffffffffffff81111561379d5761379d613ff1565b6040519080825280601f01601f1916602001820160405280156137c7576020820181803683370190505b509150863b6137fa577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a8581101561382d577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613866577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156138895750835b808352806000602085013e50955095509592505050565b6000610f4f8383613c66565b6000670de0b6b3a76400006138df837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616614c9c565b610f4f91906156f9565b825474010000000000000000000000000000000000000000900460ff161580613910575081155b1561391a57505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061396090700100000000000000000000000000000000900463ffffffff1642614c33565b90508015613a2057818311156139a2576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546139dc9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b2d565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015613abd576001600160a01b038416613a72576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016106ee565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b03851660448201526064016106ee565b84831015613bb65760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290613b019082614c33565b613b0b878a614c33565b613b159190614df9565b613b1f91906156f9565b90506001600160a01b038616613b6b576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016106ee565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b03871660448201526064016106ee565b613bc08584614c33565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6000610f4f8383613c85565b6000610f4f8383613d7f565b60006106a4825490565b6000610f4f8383613dce565b6000610f4f838360008181526001830160205260408120541515610f4f565b60008181526001830160205260408120548015613d6e576000613ca9600183614c33565b8554909150600090613cbd90600190614c33565b9050818114613d22576000866000018281548110613cdd57613cdd614cf4565b9060005260206000200154905080876000018481548110613d0057613d00614cf4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d3357613d3361570d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106a4565b60009150506106a4565b5092915050565b6000818152600183016020526040812054613dc6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106a4565b5060006106a4565b6000826000018281548110613de557613de5614cf4565b9060005260206000200154905092915050565b828054828255906000526020600020908101928215613e65579160200282015b82811115613e6557825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190613e18565b50613e71929150613e75565b5090565b5b80821115613e715760008155600101613e76565b60e081016106a482846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b67ffffffffffffffff8116811461139757600080fd5b8035613f1b81613efa565b919050565b600060208284031215613f3257600080fd5b8135610f4f81613efa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613f7c57613f7c613f3d565b9052565b602081016106a48284613f6c565b60005b83811015613fa9578181015183820152602001613f91565b50506000910152565b60008151808452613fca816020860160208601613f8e565b601f01601f19169290920160200192915050565b602081526000610f4f6020830184613fb2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561404357614043613ff1565b60405290565b6040516101a0810167ffffffffffffffff8111828210171561404357614043613ff1565b6040516080810167ffffffffffffffff8111828210171561404357614043613ff1565b604051601f8201601f1916810167ffffffffffffffff811182821017156140b9576140b9613ff1565b604052919050565b600067ffffffffffffffff8211156140db576140db613ff1565b5060051b60200190565b6001600160a01b038116811461139757600080fd5b8035613f1b816140e5565b600082601f83011261411657600080fd5b8135602061412b614126836140c1565b614090565b8083825260208201915060208460051b87010193508684111561414d57600080fd5b602086015b84811015614172578035614165816140e5565b8352918301918301614152565b509695505050505050565b803560ff81168114613f1b57600080fd5b600067ffffffffffffffff8211156141a8576141a8613ff1565b50601f01601f191660200190565b600082601f8301126141c757600080fd5b81356141d56141268261418e565b8181528460208386010111156141ea57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561422057600080fd5b863567ffffffffffffffff8082111561423857600080fd5b6142448a838b01614105565b9750602089013591508082111561425a57600080fd5b6142668a838b01614105565b965061427460408a0161417d565b9550606089013591508082111561428a57600080fd5b6142968a838b016141b6565b94506142a460808a01613f10565b935060a08901359150808211156142ba57600080fd5b506142c789828a016141b6565b9150509295509295509295565b60008151808452602080850194506020840160005b8381101561430e5781516001600160a01b0316875295820195908201906001016142e9565b509495945050505050565b602081526000610f4f60208301846142d4565b60006020828403121561433e57600080fd5b8135610f4f816140e5565b801515811461139757600080fd5b8035613f1b81614349565b600082601f83011261437357600080fd5b81356020614383614126836140c1565b82815260069290921b840181019181810190868411156143a257600080fd5b8286015b8481101561417257604081890312156143bf5760008081fd5b6143c7614020565b81356143d2816140e5565b815281850135858201528352918301916040016143a6565b600082601f8301126143fb57600080fd5b8135602061440b614126836140c1565b82815260059290921b8401810191818101908684111561442a57600080fd5b8286015b8481101561417257803567ffffffffffffffff81111561444e5760008081fd5b61445c8986838b01016141b6565b84525091830191830161442e565b60006101a0828403121561447d57600080fd5b614485614049565b905061449082613f10565b815261449e602083016140fa565b60208201526144af604083016140fa565b60408201526144c060608301613f10565b6060820152608082013560808201526144db60a08301614357565b60a08201526144ec60c08301613f10565b60c08201526144fd60e083016140fa565b60e082015261010082810135908201526101208083013567ffffffffffffffff8082111561452a57600080fd5b614536868387016141b6565b8385015261014092508285013591508082111561455257600080fd5b61455e86838701614362565b8385015261016092508285013591508082111561457a57600080fd5b50614587858286016143ea565b82840152505061018080830135818301525092915050565b600082601f8301126145b057600080fd5b813560206145c0614126836140c1565b82815260059290921b840181019181810190868411156145df57600080fd5b8286015b8481101561417257803567ffffffffffffffff8111156146035760008081fd5b6146118986838b01016143ea565b8452509183019183016145e3565b600082601f83011261463057600080fd5b81356020614640614126836140c1565b8083825260208201915060208460051b87010193508684111561466257600080fd5b602086015b848110156141725780358352918301918301614667565b60006080828403121561469057600080fd5b61469861406d565b9050813567ffffffffffffffff808211156146b257600080fd5b818401915084601f8301126146c657600080fd5b813560206146d6614126836140c1565b82815260059290921b840181019181810190888411156146f557600080fd5b8286015b8481101561472d578035868111156147115760008081fd5b61471f8b86838b010161446a565b8452509183019183016146f9565b508652508581013593508284111561474457600080fd5b6147508785880161459f565b9085015250604084013591508082111561476957600080fd5b506147768482850161461f565b6040830152506060820135606082015292915050565b6000806040838503121561479f57600080fd5b823567ffffffffffffffff808211156147b757600080fd5b6147c38683870161467e565b93506020915081850135818111156147da57600080fd5b85019050601f810186136147ed57600080fd5b80356147fb614126826140c1565b81815260059190911b8201830190838101908883111561481a57600080fd5b928401925b828410156148385783358252928401929084019061481f565b80955050505050509250929050565b60a081016106a4828463ffffffff8082511683528060208301511660208401525061ffff604082015116604083015260608101516001600160a01b03808216606085015280608084015116608085015250505050565b6000602082840312156148af57600080fd5b813567ffffffffffffffff8111156148c657600080fd5b820160a08185031215610f4f57600080fd5b600082601f8301126148e957600080fd5b813560206148f9614126836140c1565b82815260069290921b8401810191818101908684111561491857600080fd5b8286015b8481101561417257604081890312156149355760008081fd5b61493d614020565b8135614948816140e5565b815281850135614957816140e5565b8186015283529183019160400161491c565b6000806040838503121561497c57600080fd5b823567ffffffffffffffff8082111561499457600080fd5b6149a0868387016148d8565b935060208501359150808211156149b657600080fd5b506149c3858286016148d8565b9150509250929050565b60008083601f8401126149df57600080fd5b50813567ffffffffffffffff8111156149f757600080fd5b6020830191508360208260051b85010111156128fe57600080fd5b60008060008060008060008060e0898b031215614a2e57600080fd5b606089018a811115614a3f57600080fd5b8998503567ffffffffffffffff80821115614a5957600080fd5b818b0191508b601f830112614a6d57600080fd5b813581811115614a7c57600080fd5b8c6020828501011115614a8e57600080fd5b6020830199508098505060808b0135915080821115614aac57600080fd5b614ab88c838d016149cd565b909750955060a08b0135915080821115614ad157600080fd5b50614ade8b828c016149cd565b999c989b50969995989497949560c00135949350505050565b80356fffffffffffffffffffffffffffffffff81168114613f1b57600080fd5b600060608284031215614b2957600080fd5b6040516060810181811067ffffffffffffffff82111715614b4c57614b4c613ff1565b6040528235614b5a81614349565b8152614b6860208401614af7565b6020820152614b7960408401614af7565b60408201529392505050565b604081526000614b9860408301856142d4565b8281036020840152612b0881856142d4565b60008060408385031215614bbd57600080fd5b823567ffffffffffffffff80821115614bd557600080fd5b614be18683870161446a565b93506020850135915080821115614bf757600080fd5b506149c3858286016143ea565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106a4576106a4614c04565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680614c9057614c90614c46565b92169190910692915050565b80820281158282048414176106a4576106a4614c04565b600067ffffffffffffffff80841680614cce57614cce614c46565b92169190910492915050565b6020810160038310614cee57614cee613f3d565b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818103614d3c57614d3c614c04565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b16604085015250806060840152614d768184018a6142d4565b90508281036080840152614d8a81896142d4565b905060ff871660a084015282810360c0840152614da78187613fb2565b905067ffffffffffffffff851660e0840152828103610100840152614dcc8185613fb2565b9c9b505050505050505050505050565b600060208284031215614dee57600080fd5b8151610f4f81613efa565b808201808211156106a4576106a4614c04565b60008151808452602080850194506020840160005b8381101561430e57815180516001600160a01b031688528301518388015260409096019590820190600101614e21565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152614e8c610120840182613fb2565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e0860152614ec88383613fb2565b925060808901519150808584030161010086015250614ee78282614e0c565b92505050614efb602083018661ffff169052565b836040830152612b0860608301846001600160a01b03169052565b600082601f830112614f2757600080fd5b8151614f356141268261418e565b818152846020838601011115614f4a57600080fd5b6126c8826020830160208701613f8e565b600080600060608486031215614f7057600080fd5b8351614f7b81614349565b602085015190935067ffffffffffffffff811115614f9857600080fd5b614fa486828701614f16565b925050604084015190509250925092565b805163ffffffff81168114613f1b57600080fd5b600060a08284031215614fdb57600080fd5b60405160a0810181811067ffffffffffffffff82111715614ffe57614ffe613ff1565b60405261500a83614fb5565b815261501860208401614fb5565b6020820152604083015161ffff8116811461503257600080fd5b60408201526060830151615045816140e5565b60608201526080830151615058816140e5565b60808201529392505050565b61018081016150d582856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b825163ffffffff90811660e0840152602084015116610100830152604083015161ffff1661012083015260608301516001600160a01b03908116610140840152608084015116610160830152610f4f565b60006101208b83526001600160a01b038b16602084015267ffffffffffffffff808b1660408501528160608501526151608285018b6142d4565b91508382036080850152615174828a6142d4565b915060ff881660a085015283820360c08501526151918288613fb2565b90861660e08501528381036101008501529050614dcc8185613fb2565b6000602082840312156151c057600080fd5b8151610f4f81614349565b60008151808452602080850194506020840160005b8381101561430e578151875295820195908201906001016151e0565b60608152600061520f60608301866151cb565b828103602084015261522181866151cb565b915050826040830152949350505050565b60006020828403121561524457600080fd5b5051919050565b67ffffffffffffffff818116838216019080821115613d7857613d78614c04565b67ffffffffffffffff8316815260408101610f4f6020830184613f6c565b600067ffffffffffffffff808316818103614d3c57614d3c614c04565b6152b18184613f6c565b6040602082015260006126c86040830184613fb2565b6000602082840312156152d957600080fd5b813567ffffffffffffffff8111156152f057600080fd5b6126c88482850161467e565b60006020828403121561530e57600080fd5b815167ffffffffffffffff8082111561532657600080fd5b908301906080828603121561533a57600080fd5b61534261406d565b82518281111561535157600080fd5b61535d87828601614f16565b82525060208301518281111561537257600080fd5b61537e87828601614f16565b60208301525060408301518281111561539657600080fd5b6153a287828601614f16565b6040830152506153b460608401614fb5565b606082015295945050505050565b602081526000610f4f6020830184614e0c565b60008282518085526020808601955060208260051b8401016020860160005b8481101561542257601f19868403018952615410838351613fb2565b988401989250908301906001016153f4565b5090979650505050505050565b602081526000610f4f60208301846153d5565b6040815261545d60408201845167ffffffffffffffff169052565b6000602084015161547960608401826001600160a01b03169052565b5060408401516001600160a01b038116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c08401516101006154da8185018367ffffffffffffffff169052565b60e086015191506101206154f8818601846001600160a01b03169052565b81870151925061014091508282860152808701519250506101a061016081818701526155286101e0870185613fb2565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101808188870301818901526155678686614e0c565b9550828a0151945081888703018489015261558286866153d5565b9550808a01516101c089015250505050508281036020840152612b0881856153d5565b6000602082840312156155b757600080fd5b8151610f4f816140e5565b60208152600082516101008060208501526155e1610120850183613fb2565b915060208501516155fe604086018267ffffffffffffffff169052565b5060408501516001600160a01b03811660608601525060608501516080850152608085015161563860a08601826001600160a01b03169052565b5060a0850151601f19808685030160c08701526156558483613fb2565b935060c08701519150808685030160e08701526156728483613fb2565b935060e087015191508086850301838701525061568f8382613fb2565b9695505050505050565b6000604082840312156156ab57600080fd5b6156b3614020565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146156df57600080fd5b81526156ed60208401614fb5565b60208201529392505050565b60008261570857615708614c46565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var EVM2EVMOffRampABI = EVM2EVMOffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/lock_release_token_pool/lock_release_token_pool.go b/core/gethwrappers/ccip/generated/lock_release_token_pool/lock_release_token_pool.go index b2ee5137da..3e8e53c03f 100644 --- a/core/gethwrappers/ccip/generated/lock_release_token_pool/lock_release_token_pool.go +++ b/core/gethwrappers/ccip/generated/lock_release_token_pool/lock_release_token_pool.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var LockReleaseTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAccepted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAcceptLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRebalancer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"provideLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rebalancer\",\"type\":\"address\"}],\"name\":\"setRebalancer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200499e3803806200499e833981016040819052620000359162000565565b848484833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c3816200017e565b5050506001600160a01b0384161580620000e457506001600160a01b038116155b80620000f757506001600160a01b038216155b1562000116576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c052620001695760408051600081526020810190915262000169908462000229565b5050505090151560e05250620006d692505050565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000688565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000688565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200069e565b8554909150600090620003fa906001906200069e565b9050818114620004665760008660000182815481106200041e576200041e62000688565b906000526020600020015490508087600001848154811062000444576200044462000688565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a620006c0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b805180151581146200054f57600080fd5b600080600080600060a086880312156200057e57600080fd5b85516200058b8162000513565b602087810151919650906001600160401b0380821115620005ab57600080fd5b818901915089601f830112620005c057600080fd5b815181811115620005d557620005d56200052c565b8060051b604051601f19603f83011681018181108582111715620005fd57620005fd6200052c565b60405291825284820192508381018501918c8311156200061c57600080fd5b938501935b828510156200064557620006358562000542565b8452938501939285019262000621565b8099505050505050506200065c6040870162000542565b92506200066c6060870162000554565b91506200067c6080870162000542565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e05161422c62000772600039600081816104ef015261173201526000818161059c01528181611cce015261277301526000818161057601528181611aff0152611f84015260008181610290015281816102e50152818161077a0152818161084c015281816108dd015281816117f401528181611a1f01528181611ea401528181612709015261295e015261422c6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063c4bffe2b116100a2578063dc0bd97111610071578063dc0bd97114610574578063e0351e131461059a578063eb521a4c146105c0578063f2fde38b146105d357600080fd5b8063c4bffe2b14610526578063c75eea9c1461053b578063cf7401f31461054e578063db6327dc1461056157600080fd5b8063b0f479a1116100de578063b0f479a1146104bc578063b7946580146104da578063bb98546b146104ed578063c0d786551461051357600080fd5b80638da5cb5b146103fa5780639a4575b914610418578063a7cd63b714610438578063af58d59f1461044d57600080fd5b806354c8a4f31161018757806378a010b21161015657806378a010b2146103b957806379ba5097146103cc5780637d54534e146103d45780638926f54f146103e757600080fd5b806354c8a4f31461036257806366320087146103755780636cfd1553146103885780636d3d1a581461039b57600080fd5b806321df0da7116101c357806321df0da71461028e578063240028e8146102d55780633907753714610322578063432a6ba31461034457600080fd5b806301ffc9a7146101f55780630a2fd4931461021d5780630a861f2a1461023d578063181f5a7714610252575b600080fd5b610208610203366004613308565b6105e6565b60405190151581526020015b60405180910390f35b61023061022b366004613367565b610642565b60405161021491906133f0565b61025061024b366004613403565b6106f2565b005b6102306040518060400160405280601e81526020017f4c6f636b52656c65617365546f6b656e506f6f6c20312e352e302d646576000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610214565b6102086102e3366004613449565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610335610330366004613466565b6108a3565b60405190518152602001610214565b60095473ffffffffffffffffffffffffffffffffffffffff166102b0565b6102506103703660046134ee565b610999565b61025061038336600461355a565b610a14565b610250610396366004613449565b610af0565b60085473ffffffffffffffffffffffffffffffffffffffff166102b0565b6102506103c7366004613586565b610b3f565b610250610cae565b6102506103e2366004613449565b610dab565b6102086103f5366004613367565b610dfa565b60005473ffffffffffffffffffffffffffffffffffffffff166102b0565b61042b610426366004613609565b610e11565b6040516102149190613644565b610440610eab565b60405161021491906136a4565b61046061045b366004613367565b610ebc565b604051610214919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102b0565b6102306104e8366004613367565b610f91565b7f0000000000000000000000000000000000000000000000000000000000000000610208565b610250610521366004613449565b610fbc565b61052e611097565b60405161021491906136fe565b610460610549366004613367565b61114f565b61025061055c366004613866565b611221565b61025061056f3660046138ab565b6112aa565b7f00000000000000000000000000000000000000000000000000000000000000006102b0565b7f0000000000000000000000000000000000000000000000000000000000000000610208565b6102506105ce366004613403565b611730565b6102506105e1366004613449565b61184c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d4056600000000000000000000000000000000000000000000000000000000148061063c575061063c82611860565b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061066d906138ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906138ed565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b50505050509050919050565b60095473ffffffffffffffffffffffffffffffffffffffff16331461074a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa9190613940565b1015610832576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611944565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040805160208101909152600081526108c36108be83613a04565b611a18565b61090873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016336060850135611944565b6109186060830160408401613449565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52846060013560405161097a91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6109a1611c49565b610a0e84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611ccc92505050565b50505050565b610a1c611c49565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167f6fa7abcf1345d1d478e5ea0da6b5f26a90eadb0546ef15ed3833944fbfd1db6282604051610ae491815260200190565b60405180910390a25050565b610af8611c49565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b47611c49565b610b5083610dfa565b610b92576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610741565b67ffffffffffffffff831660009081526007602052604081206004018054610bb9906138ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610be5906138ed565b8015610c325780601f10610c0757610100808354040283529160200191610c32565b820191906000526020600020905b815481529060010190602001808311610c1557829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610c61838583613b49565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610ca093929190613c64565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610741565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610db3611c49565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061063c600567ffffffffffffffff8416611e82565b6040805180820190915260608082526020820152610e36610e3183613cc8565b611e9d565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a26040518060400160405280610e908460200160208101906104e89190613367565b81526040805160208181019092526000815291015292915050565b6060610eb76002612067565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261063c90612074565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061066d906138ed565b610fc4611c49565b73ffffffffffffffffffffffffffffffffffffffff8116611011576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b606060006110a56005612067565b90506000815167ffffffffffffffff8111156110c3576110c3613740565b6040519080825280602002602001820160405280156110ec578160200160208202803683370190505b50905060005b82518110156111485782818151811061110d5761110d613d6a565b602002602001015182828151811061112757611127613d6a565b67ffffffffffffffff909216602092830291909101909101526001016110f2565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261063c90612074565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611261575060005473ffffffffffffffffffffffffffffffffffffffff163314155b1561129a576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b6112a5838383612126565b505050565b6112b2611c49565b60005b818110156112a55760008383838181106112d1576112d1613d6a565b90506020028101906112e39190613d99565b6112ec90613dd7565b90506113018160800151826020015115612210565b6113148160a00151826020015115612210565b8060200151156116105780516113369060059067ffffffffffffffff16612349565b61137b5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610741565b60408101515115806113905750606081015151155b156113c7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906115a89082613e8b565b50606082015160058201906115bd9082613e8b565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506116039493929190613fa5565b60405180910390a1611727565b80516116289060059067ffffffffffffffff16612355565b61166d5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610741565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906116d660048301826132ba565b6116e46005830160006132ba565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016112b5565b7f0000000000000000000000000000000000000000000000000000000000000000611787576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095473ffffffffffffffffffffffffffffffffffffffff1633146117da576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b61181c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084612361565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611854611c49565b61185d816123bf565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806118f357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061063c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112a59084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124b4565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611aad5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610741565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7f919061403e565b15611bb6576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bc381602001516125c0565b6000611bd28260200151610642565b9050805160001480611bf6575080805190602001208260a001518051906020012014155b15611c33578160a001516040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161074191906133f0565b611c45826020015183606001516126e6565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610741565b565b7f0000000000000000000000000000000000000000000000000000000000000000611d23576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611db9576000838281518110611d4357611d43613d6a565b60200260200101519050611d6181600261272d90919063ffffffff16565b15611db05760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611d26565b5060005b81518110156112a5576000828281518110611dda57611dda613d6a565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e1e5750611e7a565b611e2960028261274f565b15611e785760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611dbd565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611f325760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610741565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612004919061403e565b1561203b576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120488160400151612771565b61205581602001516127f0565b61185d8160200151826060015161293e565b60606000611e9683612982565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261210282606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426120e6919061408a565b85608001516fffffffffffffffffffffffffffffffff166129dd565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61212f83610dfa565b612171576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610741565b61217c826000612210565b67ffffffffffffffff8316600090815260076020526040902061219f9083612a07565b6121aa816000612210565b67ffffffffffffffff831660009081526007602052604090206121d09060020182612a07565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516122039392919061409d565b60405180910390a1505050565b8151156122d75781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612266575060408201516fffffffffffffffffffffffffffffffff16155b1561229f57816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107419190614120565b8015611c45576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612310575060208201516fffffffffffffffffffffffffffffffff1615155b15611c4557816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107419190614120565b6000611e968383612ba9565b6000611e968383612bf8565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610a0e9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611996565b3373ffffffffffffffffffffffffffffffffffffffff82160361243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610741565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612516826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ceb9092919063ffffffff16565b8051909150156112a55780806020019051810190612534919061403e565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610741565b6125c981610dfa565b61260b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610741565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa15801561268a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae919061403e565b61185d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b67ffffffffffffffff82166000908152600760205260409020611c4590600201827f0000000000000000000000000000000000000000000000000000000000000000612cfa565b6000611e968373ffffffffffffffffffffffffffffffffffffffff8416612bf8565b6000611e968373ffffffffffffffffffffffffffffffffffffffff8416612ba9565b7f00000000000000000000000000000000000000000000000000000000000000001561185d576127a260028261307d565b61185d576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610741565b6127f981610dfa565b61283b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610741565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa1580156128b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d8919061415c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b67ffffffffffffffff82166000908152600760205260409020611c4590827f0000000000000000000000000000000000000000000000000000000000000000612cfa565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106e657602002820191906000526020600020905b8154815260200190600101908083116129be5750505050509050919050565b60006129fc856129ed8486614179565b6129f79087614190565b6130ac565b90505b949350505050565b8154600090612a3090700100000000000000000000000000000000900463ffffffff164261408a565b90508015612ad25760018301548354612a78916fffffffffffffffffffffffffffffffff808216928116918591700100000000000000000000000000000000909104166129dd565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612af8916fffffffffffffffffffffffffffffffff90811691166130ac565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612203908490614120565b6000818152600183016020526040812054612bf05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561063c565b50600061063c565b60008181526001830160205260408120548015612ce1576000612c1c60018361408a565b8554909150600090612c309060019061408a565b9050818114612c95576000866000018281548110612c5057612c50613d6a565b9060005260206000200154905080876000018481548110612c7357612c73613d6a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ca657612ca66141a3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061063c565b600091505061063c565b60606129ff84846000856130c2565b825474010000000000000000000000000000000000000000900460ff161580612d21575081155b15612d2b57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612d7190700100000000000000000000000000000000900463ffffffff164261408a565b90508015612e315781831115612db3576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612ded9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166129dd565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612ee85773ffffffffffffffffffffffffffffffffffffffff8416612e90576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610741565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610741565b84831015612ffb5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612f2c908261408a565b612f36878a61408a565b612f409190614190565b612f4a91906141d2565b905073ffffffffffffffffffffffffffffffffffffffff8616612fa3576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610741565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610741565b613005858461408a565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611e96565b60008183106130bb5781611e96565b5090919050565b606082471015613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610741565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161317d919061420d565b60006040518083038185875af1925050503d80600081146131ba576040519150601f19603f3d011682016040523d82523d6000602084013e6131bf565b606091505b50915091506131d0878383876131db565b979650505050505050565b6060831561327157825160000361326a5773ffffffffffffffffffffffffffffffffffffffff85163b61326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610741565b50816129ff565b6129ff83838151156132865781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074191906133f0565b5080546132c6906138ed565b6000825580601f106132d6575050565b601f01602090049060005260206000209081019061185d91905b8082111561330457600081556001016132f0565b5090565b60006020828403121561331a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e9657600080fd5b803567ffffffffffffffff8116811461336257600080fd5b919050565b60006020828403121561337957600080fd5b611e968261334a565b60005b8381101561339d578181015183820152602001613385565b50506000910152565b600081518084526133be816020860160208601613382565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e9660208301846133a6565b60006020828403121561341557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461185d57600080fd5b80356133628161341c565b60006020828403121561345b57600080fd5b8135611e968161341c565b60006020828403121561347857600080fd5b813567ffffffffffffffff81111561348f57600080fd5b82016101008185031215611e9657600080fd5b60008083601f8401126134b457600080fd5b50813567ffffffffffffffff8111156134cc57600080fd5b6020830191508360208260051b85010111156134e757600080fd5b9250929050565b6000806000806040858703121561350457600080fd5b843567ffffffffffffffff8082111561351c57600080fd5b613528888389016134a2565b9096509450602087013591508082111561354157600080fd5b5061354e878288016134a2565b95989497509550505050565b6000806040838503121561356d57600080fd5b82356135788161341c565b946020939093013593505050565b60008060006040848603121561359b57600080fd5b6135a48461334a565b9250602084013567ffffffffffffffff808211156135c157600080fd5b818601915086601f8301126135d557600080fd5b8135818111156135e457600080fd5b8760208285010111156135f657600080fd5b6020830194508093505050509250925092565b60006020828403121561361b57600080fd5b813567ffffffffffffffff81111561363257600080fd5b820160a08185031215611e9657600080fd5b60208152600082516040602084015261366060608401826133a6565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261369b82826133a6565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156136f257835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016136c0565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136f257835167ffffffffffffffff168352928401929184019160010161371a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561379357613793613740565b60405290565b60405160c0810167ffffffffffffffff8111828210171561379357613793613740565b801515811461185d57600080fd5b8035613362816137bc565b80356fffffffffffffffffffffffffffffffff8116811461336257600080fd5b60006060828403121561380757600080fd5b6040516060810181811067ffffffffffffffff8211171561382a5761382a613740565b604052905080823561383b816137bc565b8152613849602084016137d5565b602082015261385a604084016137d5565b60408201525092915050565b600080600060e0848603121561387b57600080fd5b6138848461334a565b925061389385602086016137f5565b91506138a285608086016137f5565b90509250925092565b600080602083850312156138be57600080fd5b823567ffffffffffffffff8111156138d557600080fd5b6138e1858286016134a2565b90969095509350505050565b600181811c9082168061390157607f821691505b60208210810361393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020828403121561395257600080fd5b5051919050565b600082601f83011261396a57600080fd5b813567ffffffffffffffff8082111561398557613985613740565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156139cb576139cb613740565b816040528381528660208588010111156139e457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215613a1757600080fd5b613a1f61376f565b823567ffffffffffffffff80821115613a3757600080fd5b613a4336838701613959565b8352613a516020860161334a565b6020840152613a626040860161343e565b604084015260608501356060840152613a7d6080860161343e565b608084015260a0850135915080821115613a9657600080fd5b613aa236838701613959565b60a084015260c0850135915080821115613abb57600080fd5b613ac736838701613959565b60c084015260e0850135915080821115613ae057600080fd5b50613aed36828601613959565b60e08301525092915050565b601f8211156112a5576000816000526020600020601f850160051c81016020861015613b225750805b601f850160051c820191505b81811015613b4157828155600101613b2e565b505050505050565b67ffffffffffffffff831115613b6157613b61613740565b613b7583613b6f83546138ed565b83613af9565b6000601f841160018114613bc75760008515613b915750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613c5d565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613c165786850135825560209485019460019092019101613bf6565b5086821015613c51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000613c7760408301866133a6565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a08236031215613cda57600080fd5b60405160a0810167ffffffffffffffff8282108183111715613cfe57613cfe613740565b816040528435915080821115613d1357600080fd5b50613d2036828601613959565b825250613d2f6020840161334a565b60208201526040830135613d428161341c565b6040820152606083810135908201526080830135613d5f8161341c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613dcd57600080fd5b9190910192915050565b60006101408236031215613dea57600080fd5b613df2613799565b613dfb8361334a565b8152613e09602084016137ca565b6020820152604083013567ffffffffffffffff80821115613e2957600080fd5b613e3536838701613959565b60408401526060850135915080821115613e4e57600080fd5b50613e5b36828601613959565b606083015250613e6e36608085016137f5565b6080820152613e803660e085016137f5565b60a082015292915050565b815167ffffffffffffffff811115613ea557613ea5613740565b613eb981613eb384546138ed565b84613af9565b602080601f831160018114613f0c5760008415613ed65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b41565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613f5957888601518255948401946001909101908401613f3a565b5085821015613f9557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613fc9818401876133a6565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506140079050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e083015261369b565b60006020828403121561405057600080fd5b8151611e96816137bc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561063c5761063c61405b565b67ffffffffffffffff8416815260e081016140e960208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c08301526129ff565b6060810161063c82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561416e57600080fd5b8151611e968161341c565b808202811582820484141761063c5761063c61405b565b8082018082111561063c5761063c61405b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614208577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613dcd81846020870161338256fea164736f6c6343000818000a", + Bin: "0x6101006040523480156200001257600080fd5b5060405162004a1738038062004a17833981016040819052620000359162000565565b848484833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c3816200017e565b5050506001600160a01b0384161580620000e457506001600160a01b038116155b80620000f757506001600160a01b038216155b1562000116576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c052620001695760408051600081526020810190915262000169908462000229565b5050505090151560e05250620006d692505050565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000688565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000688565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200069e565b8554909150600090620003fa906001906200069e565b9050818114620004665760008660000182815481106200041e576200041e62000688565b906000526020600020015490508087600001848154811062000444576200044462000688565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a620006c0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b805180151581146200054f57600080fd5b600080600080600060a086880312156200057e57600080fd5b85516200058b8162000513565b602087810151919650906001600160401b0380821115620005ab57600080fd5b818901915089601f830112620005c057600080fd5b815181811115620005d557620005d56200052c565b8060051b604051601f19603f83011681018181108582111715620005fd57620005fd6200052c565b60405291825284820192508381018501918c8311156200061c57600080fd5b938501935b828510156200064557620006358562000542565b8452938501939285019262000621565b8099505050505050506200065c6040870162000542565b92506200066c6060870162000554565b91506200067c6080870162000542565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e0516142a562000772600039600081816104ef01526117ab01526000818161059c01528181611d4701526127ec01526000818161057601528181611b780152611ffd015260008181610290015281816102e50152818161077a0152818161084c015281816108c50152818161186d01528181611a9801528181611f1d0152818161278201526129d701526142a56000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063c4bffe2b116100a2578063dc0bd97111610071578063dc0bd97114610574578063e0351e131461059a578063eb521a4c146105c0578063f2fde38b146105d357600080fd5b8063c4bffe2b14610526578063c75eea9c1461053b578063cf7401f31461054e578063db6327dc1461056157600080fd5b8063b0f479a1116100de578063b0f479a1146104bc578063b7946580146104da578063bb98546b146104ed578063c0d786551461051357600080fd5b80638da5cb5b146103fa5780639a4575b914610418578063a7cd63b714610438578063af58d59f1461044d57600080fd5b806354c8a4f31161018757806378a010b21161015657806378a010b2146103b957806379ba5097146103cc5780637d54534e146103d45780638926f54f146103e757600080fd5b806354c8a4f31461036257806366320087146103755780636cfd1553146103885780636d3d1a581461039b57600080fd5b806321df0da7116101c357806321df0da71461028e578063240028e8146102d55780633907753714610322578063432a6ba31461034457600080fd5b806301ffc9a7146101f55780630a2fd4931461021d5780630a861f2a1461023d578063181f5a7714610252575b600080fd5b610208610203366004613381565b6105e6565b60405190151581526020015b60405180910390f35b61023061022b3660046133e0565b610642565b6040516102149190613469565b61025061024b36600461347c565b6106f2565b005b6102306040518060400160405280601e81526020017f4c6f636b52656c65617365546f6b656e506f6f6c20312e352e302d646576000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610214565b6102086102e33660046134c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6103356103303660046134df565b6108a3565b60405190518152602001610214565b60095473ffffffffffffffffffffffffffffffffffffffff166102b0565b610250610370366004613567565b610a12565b6102506103833660046135d3565b610a8d565b6102506103963660046134c2565b610b69565b60085473ffffffffffffffffffffffffffffffffffffffff166102b0565b6102506103c73660046135ff565b610bb8565b610250610d27565b6102506103e23660046134c2565b610e24565b6102086103f53660046133e0565b610e73565b60005473ffffffffffffffffffffffffffffffffffffffff166102b0565b61042b610426366004613682565b610e8a565b60405161021491906136bd565b610440610f24565b604051610214919061371d565b61046061045b3660046133e0565b610f35565b604051610214919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102b0565b6102306104e83660046133e0565b61100a565b7f0000000000000000000000000000000000000000000000000000000000000000610208565b6102506105213660046134c2565b611035565b61052e611110565b6040516102149190613777565b6104606105493660046133e0565b6111c8565b61025061055c3660046138df565b61129a565b61025061056f366004613924565b611323565b7f00000000000000000000000000000000000000000000000000000000000000006102b0565b7f0000000000000000000000000000000000000000000000000000000000000000610208565b6102506105ce36600461347c565b6117a9565b6102506105e13660046134c2565b6118c5565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d4056600000000000000000000000000000000000000000000000000000000148061063c575061063c826118d9565b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061066d90613966565b80601f016020809104026020016040519081016040528092919081815260200182805461069990613966565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b50505050509050919050565b60095473ffffffffffffffffffffffffffffffffffffffff16331461074a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa91906139b9565b1015610832576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633836119bd565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040805160208101909152600081526108c36108be83613a7d565b611a91565b7f00000000000000000000000000000000000000000000000000000000000000006040517f095ea7b30000000000000000000000000000000000000000000000000000000081523360048201526060840135602482015273ffffffffffffffffffffffffffffffffffffffff919091169063095ea7b3906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109809190613b72565b5061099160608301604084016134c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f5284606001356040516109f391815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610a1a611cc2565b610a8784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611d4592505050565b50505050565b610a95611cc2565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610afd57600080fd5b505af1158015610b11573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167f6fa7abcf1345d1d478e5ea0da6b5f26a90eadb0546ef15ed3833944fbfd1db6282604051610b5d91815260200190565b60405180910390a25050565b610b71611cc2565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610bc0611cc2565b610bc983610e73565b610c0b576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610741565b67ffffffffffffffff831660009081526007602052604081206004018054610c3290613966565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5e90613966565b8015610cab5780601f10610c8057610100808354040283529160200191610cab565b820191906000526020600020905b815481529060010190602001808311610c8e57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610cda838583613bdf565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610d1993929190613cfa565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610741565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e2c611cc2565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061063c600567ffffffffffffffff8416611efb565b6040805180820190915260608082526020820152610eaf610eaa83613d5e565b611f16565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a26040518060400160405280610f098460200160208101906104e891906133e0565b81526040805160208181019092526000815291015292915050565b6060610f3060026120e0565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261063c906120ed565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061066d90613966565b61103d611cc2565b73ffffffffffffffffffffffffffffffffffffffff811661108a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b6060600061111e60056120e0565b90506000815167ffffffffffffffff81111561113c5761113c6137b9565b604051908082528060200260200182016040528015611165578160200160208202803683370190505b50905060005b82518110156111c15782818151811061118657611186613e00565b60200260200101518282815181106111a0576111a0613e00565b67ffffffffffffffff9092166020928302919091019091015260010161116b565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261063c906120ed565b60085473ffffffffffffffffffffffffffffffffffffffff1633148015906112da575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15611313576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b61131e83838361219f565b505050565b61132b611cc2565b60005b8181101561131e57600083838381811061134a5761134a613e00565b905060200281019061135c9190613e2f565b61136590613e6d565b905061137a8160800151826020015115612289565b61138d8160a00151826020015115612289565b8060200151156116895780516113af9060059067ffffffffffffffff166123c2565b6113f45780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610741565b60408101515115806114095750606081015151155b15611440576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906116219082613f21565b50606082015160058201906116369082613f21565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061167c949392919061403b565b60405180910390a16117a0565b80516116a19060059067ffffffffffffffff166123ce565b6116e65780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610741565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff0000000000000000000000000000000000000000009081168255600182018390556002820180549091169055600381018290559061174f6004830182613333565b61175d600583016000613333565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b5060010161132e565b7f0000000000000000000000000000000000000000000000000000000000000000611800576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095473ffffffffffffffffffffffffffffffffffffffff163314611853576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b61189573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846123da565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b6118cd611cc2565b6118d681612438565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061196c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061063c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261131e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261252d565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611b265760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610741565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf89190613b72565b15611c2f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c3c8160200151612639565b6000611c4b8260200151610642565b9050805160001480611c6f575080805190602001208260a001518051906020012014155b15611cac578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016107419190613469565b611cbe8260200151836060015161275f565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610741565b565b7f0000000000000000000000000000000000000000000000000000000000000000611d9c576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611e32576000838281518110611dbc57611dbc613e00565b60200260200101519050611dda8160026127a690919063ffffffff16565b15611e295760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611d9f565b5060005b815181101561131e576000828281518110611e5357611e53613e00565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e975750611ef3565b611ea26002826127c8565b15611ef15760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611e36565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611fab5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610741565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015612059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207d9190613b72565b156120b4576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c181604001516127ea565b6120ce8160200151612869565b6118d6816020015182606001516129b7565b60606000611f0f836129fb565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261217b82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261215f9190614103565b85608001516fffffffffffffffffffffffffffffffff16612a56565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6121a883610e73565b6121ea576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610741565b6121f5826000612289565b67ffffffffffffffff831660009081526007602052604090206122189083612a80565b612223816000612289565b67ffffffffffffffff831660009081526007602052604090206122499060020182612a80565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161227c93929190614116565b60405180910390a1505050565b8151156123505781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806122df575060408201516fffffffffffffffffffffffffffffffff16155b1561231857816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107419190614199565b8015611cbe576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612389575060208201516fffffffffffffffffffffffffffffffff1615155b15611cbe57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107419190614199565b6000611f0f8383612c22565b6000611f0f8383612c71565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610a879085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a0f565b3373ffffffffffffffffffffffffffffffffffffffff8216036124b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610741565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061258f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d649092919063ffffffff16565b80519091501561131e57808060200190518101906125ad9190613b72565b61131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610741565b61264281610e73565b612684576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610741565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612703573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127279190613b72565b6118d6576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b67ffffffffffffffff82166000908152600760205260409020611cbe90600201827f0000000000000000000000000000000000000000000000000000000000000000612d73565b6000611f0f8373ffffffffffffffffffffffffffffffffffffffff8416612c71565b6000611f0f8373ffffffffffffffffffffffffffffffffffffffff8416612c22565b7f0000000000000000000000000000000000000000000000000000000000000000156118d65761281b6002826130f6565b6118d6576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610741565b61287281610e73565b6128b4576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610741565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561292d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295191906141d5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610741565b67ffffffffffffffff82166000908152600760205260409020611cbe90827f0000000000000000000000000000000000000000000000000000000000000000612d73565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106e657602002820191906000526020600020905b815481526020019060010190808311612a375750505050509050919050565b6000612a7585612a6684866141f2565b612a709087614209565b613125565b90505b949350505050565b8154600090612aa990700100000000000000000000000000000000900463ffffffff1642614103565b90508015612b4b5760018301548354612af1916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612a56565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612b71916fffffffffffffffffffffffffffffffff9081169116613125565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061227c908490614199565b6000818152600183016020526040812054612c695750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561063c565b50600061063c565b60008181526001830160205260408120548015612d5a576000612c95600183614103565b8554909150600090612ca990600190614103565b9050818114612d0e576000866000018281548110612cc957612cc9613e00565b9060005260206000200154905080876000018481548110612cec57612cec613e00565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612d1f57612d1f61421c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061063c565b600091505061063c565b6060612a78848460008561313b565b825474010000000000000000000000000000000000000000900460ff161580612d9a575081155b15612da457505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612dea90700100000000000000000000000000000000900463ffffffff1642614103565b90508015612eaa5781831115612e2c576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612e669083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612a56565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612f615773ffffffffffffffffffffffffffffffffffffffff8416612f09576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610741565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610741565b848310156130745760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612fa59082614103565b612faf878a614103565b612fb99190614209565b612fc3919061424b565b905073ffffffffffffffffffffffffffffffffffffffff861661301c576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610741565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610741565b61307e8584614103565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611f0f565b60008183106131345781611f0f565b5090919050565b6060824710156131cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610741565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516131f69190614286565b60006040518083038185875af1925050503d8060008114613233576040519150601f19603f3d011682016040523d82523d6000602084013e613238565b606091505b509150915061324987838387613254565b979650505050505050565b606083156132ea5782516000036132e35773ffffffffffffffffffffffffffffffffffffffff85163b6132e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610741565b5081612a78565b612a7883838151156132ff5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107419190613469565b50805461333f90613966565b6000825580601f1061334f575050565b601f0160209004906000526020600020908101906118d691905b8082111561337d5760008155600101613369565b5090565b60006020828403121561339357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f0f57600080fd5b803567ffffffffffffffff811681146133db57600080fd5b919050565b6000602082840312156133f257600080fd5b611f0f826133c3565b60005b838110156134165781810151838201526020016133fe565b50506000910152565b600081518084526134378160208601602086016133fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f0f602083018461341f565b60006020828403121561348e57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146118d657600080fd5b80356133db81613495565b6000602082840312156134d457600080fd5b8135611f0f81613495565b6000602082840312156134f157600080fd5b813567ffffffffffffffff81111561350857600080fd5b82016101008185031215611f0f57600080fd5b60008083601f84011261352d57600080fd5b50813567ffffffffffffffff81111561354557600080fd5b6020830191508360208260051b850101111561356057600080fd5b9250929050565b6000806000806040858703121561357d57600080fd5b843567ffffffffffffffff8082111561359557600080fd5b6135a18883890161351b565b909650945060208701359150808211156135ba57600080fd5b506135c78782880161351b565b95989497509550505050565b600080604083850312156135e657600080fd5b82356135f181613495565b946020939093013593505050565b60008060006040848603121561361457600080fd5b61361d846133c3565b9250602084013567ffffffffffffffff8082111561363a57600080fd5b818601915086601f83011261364e57600080fd5b81358181111561365d57600080fd5b87602082850101111561366f57600080fd5b6020830194508093505050509250925092565b60006020828403121561369457600080fd5b813567ffffffffffffffff8111156136ab57600080fd5b820160a08185031215611f0f57600080fd5b6020815260008251604060208401526136d9606084018261341f565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613714828261341f565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561376b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613739565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561376b57835167ffffffffffffffff1683529284019291840191600101613793565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561380c5761380c6137b9565b60405290565b60405160c0810167ffffffffffffffff8111828210171561380c5761380c6137b9565b80151581146118d657600080fd5b80356133db81613835565b80356fffffffffffffffffffffffffffffffff811681146133db57600080fd5b60006060828403121561388057600080fd5b6040516060810181811067ffffffffffffffff821117156138a3576138a36137b9565b60405290508082356138b481613835565b81526138c26020840161384e565b60208201526138d36040840161384e565b60408201525092915050565b600080600060e084860312156138f457600080fd5b6138fd846133c3565b925061390c856020860161386e565b915061391b856080860161386e565b90509250925092565b6000806020838503121561393757600080fd5b823567ffffffffffffffff81111561394e57600080fd5b61395a8582860161351b565b90969095509350505050565b600181811c9082168061397a57607f821691505b6020821081036139b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156139cb57600080fd5b5051919050565b600082601f8301126139e357600080fd5b813567ffffffffffffffff808211156139fe576139fe6137b9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613a4457613a446137b9565b81604052838152866020858801011115613a5d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215613a9057600080fd5b613a986137e8565b823567ffffffffffffffff80821115613ab057600080fd5b613abc368387016139d2565b8352613aca602086016133c3565b6020840152613adb604086016134b7565b604084015260608501356060840152613af6608086016134b7565b608084015260a0850135915080821115613b0f57600080fd5b613b1b368387016139d2565b60a084015260c0850135915080821115613b3457600080fd5b613b40368387016139d2565b60c084015260e0850135915080821115613b5957600080fd5b50613b66368286016139d2565b60e08301525092915050565b600060208284031215613b8457600080fd5b8151611f0f81613835565b601f82111561131e576000816000526020600020601f850160051c81016020861015613bb85750805b601f850160051c820191505b81811015613bd757828155600101613bc4565b505050505050565b67ffffffffffffffff831115613bf757613bf76137b9565b613c0b83613c058354613966565b83613b8f565b6000601f841160018114613c5d5760008515613c275750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613cf3565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613cac5786850135825560209485019460019092019101613c8c565b5086821015613ce7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000613d0d604083018661341f565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a08236031215613d7057600080fd5b60405160a0810167ffffffffffffffff8282108183111715613d9457613d946137b9565b816040528435915080821115613da957600080fd5b50613db6368286016139d2565b825250613dc5602084016133c3565b60208201526040830135613dd881613495565b6040820152606083810135908201526080830135613df581613495565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613e6357600080fd5b9190910192915050565b60006101408236031215613e8057600080fd5b613e88613812565b613e91836133c3565b8152613e9f60208401613843565b6020820152604083013567ffffffffffffffff80821115613ebf57600080fd5b613ecb368387016139d2565b60408401526060850135915080821115613ee457600080fd5b50613ef1368286016139d2565b606083015250613f04366080850161386e565b6080820152613f163660e0850161386e565b60a082015292915050565b815167ffffffffffffffff811115613f3b57613f3b6137b9565b613f4f81613f498454613966565b84613b8f565b602080601f831160018114613fa25760008415613f6c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613bd7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613fef57888601518255948401946001909101908401613fd0565b508582101561402b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff8716835280602084015261405f8184018761341f565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff908116606087015290870151166080850152915061409d9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613714565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561063c5761063c6140d4565b67ffffffffffffffff8416815260e0810161416260208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612a78565b6060810161063c82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156141e757600080fd5b8151611f0f81613495565b808202811582820484141761063c5761063c6140d4565b8082018082111561063c5761063c6140d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614281577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613e638184602087016133fb56fea164736f6c6343000818000a", } var LockReleaseTokenPoolABI = LockReleaseTokenPoolMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go b/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go index 73f2ea6dc4..88018a164b 100644 --- a/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go +++ b/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go @@ -83,7 +83,7 @@ type TokenPoolChainUpdate struct { var LockReleaseTokenPoolAndProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAccepted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAcceptLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRebalancer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"provideLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rebalancer\",\"type\":\"address\"}],\"name\":\"setRebalancer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162004ef938038062004ef983398101604081905262000035916200056d565b84848483838383833380600081620000945760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c757620000c78162000186565b5050506001600160a01b0384161580620000e857506001600160a01b038116155b80620000fb57506001600160a01b038216155b156200011a576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016d576040805160008152602081019091526200016d908462000231565b5050505094151560e05250620006de9650505050505050565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008b565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000252576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002dd57600083828151811062000276576200027662000690565b60209081029190910101519050620002906002826200038e565b15620002d3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000255565b5060005b81518110156200038957600082828151811062000302576200030262000690565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200032e575062000380565b6200033b600282620003ae565b156200037e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002e1565b505050565b6000620003a5836001600160a01b038416620003c5565b90505b92915050565b6000620003a5836001600160a01b038416620004c9565b60008181526001830160205260408120548015620004be576000620003ec600183620006a6565b85549091506000906200040290600190620006a6565b90508181146200046e57600086600001828154811062000426576200042662000690565b90600052602060002001549050808760000184815481106200044c576200044c62000690565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004825762000482620006c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a8565b6000915050620003a8565b60008181526001830160205260408120546200051257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a8565b506000620003a8565b6001600160a01b03811681146200053157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000557816200051b565b919050565b805180151581146200055757600080fd5b600080600080600060a086880312156200058657600080fd5b855162000593816200051b565b602087810151919650906001600160401b0380821115620005b357600080fd5b818901915089601f830112620005c857600080fd5b815181811115620005dd57620005dd62000534565b8060051b604051601f19603f8301168101818110858211171562000605576200060562000534565b60405291825284820192508381018501918c8311156200062457600080fd5b938501935b828510156200064d576200063d856200054a565b8452938501939285019262000629565b80995050505050505062000664604087016200054a565b925062000674606087016200055c565b915062000684608087016200054a565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e0516147786200078160003960008181610545015261190b0152600081816105f201528181611f400152612afc0152600081816105cc01528181611cd801526121f30152600081816102ad01528181610302015281816107d0015281816108a20152818161096c015281816119cd01528181611bf801528181612113015281816122f901528181612a920152612ce701526147786000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638da5cb5b11610145578063c0d78655116100bd578063db6327dc1161008c578063e0351e1311610071578063e0351e13146105f0578063eb521a4c14610616578063f2fde38b1461062957600080fd5b8063db6327dc146105b7578063dc0bd971146105ca57600080fd5b8063c0d7865514610569578063c4bffe2b1461057c578063c75eea9c14610591578063cf7401f3146105a457600080fd5b8063a8d87a3b11610114578063b0f479a1116100f9578063b0f479a114610512578063b794658014610530578063bb98546b1461054357600080fd5b8063a8d87a3b14610490578063af58d59f146104a357600080fd5b80638da5cb5b1461042a5780639766b932146104485780639a4575b91461045b578063a7cd63b71461047b57600080fd5b806354c8a4f3116101d857806378a010b2116101a75780637d54534e1161018c5780637d54534e146103f157806383826b2b146104045780638926f54f1461041757600080fd5b806378a010b2146103d657806379ba5097146103e957600080fd5b806354c8a4f31461037f57806366320087146103925780636cfd1553146103a55780636d3d1a58146103b857600080fd5b806321df0da71161021457806321df0da7146102ab578063240028e8146102f2578063390775371461033f578063432a6ba31461036157600080fd5b806301ffc9a7146102465780630a2fd4931461026e5780630a861f2a1461028e578063181f5a77146102a3575b600080fd5b610259610254366004613691565b61063c565b60405190151581526020015b60405180910390f35b61028161027c3660046136f0565b610698565b6040516102659190613779565b6102a161029c36600461378c565b610748565b005b6102816108f9565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610265565b6102596103003660046137d2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61035261034d3660046137ef565b610915565b60405190518152602001610265565b600a5473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a161038d366004613877565b610a3e565b6102a16103a03660046138e3565b610ab9565b6102a16103b33660046137d2565b610b45565b60085473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a16103e436600461390f565b610b94565b6102a1610d03565b6102a16103ff3660046137d2565b610e00565b610259610412366004613992565b610e4f565b6102596104253660046136f0565b610f1c565b60005473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a16104563660046137d2565b610f33565b61046e6104693660046139c9565b610fc2565b6040516102659190613a04565b61048361108b565b6040516102659190613a64565b6102cd61049e3660046136f0565b503090565b6104b66104b13660046136f0565b61109c565b604051610265919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102cd565b61028161053e3660046136f0565b611171565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a16105773660046137d2565b61119c565b610584611270565b6040516102659190613abe565b6104b661059f3660046136f0565b611328565b6102a16105b2366004613c75565b6113fa565b6102a16105c5366004613cba565b611483565b7f00000000000000000000000000000000000000000000000000000000000000006102cd565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a161062436600461378c565b611909565b6102a16106373660046137d2565b611a25565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d40566000000000000000000000000000000000000000000000000000000001480610692575061069282611a39565b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106c390613cfc565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90613cfc565b801561073c5780601f106107115761010080835404028352916020019161073c565b820191906000526020600020905b81548152906001019060200180831161071f57829003601f168201915b50505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146107a0576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561082c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108509190613d4f565b1015610888576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611b1d565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040518060600160405280602681526020016147466026913981565b60408051602081019091526000815261093561093083613e04565b611bf1565b60095473ffffffffffffffffffffffffffffffffffffffff1661099c5761099773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016336060850135611b1d565b6109ad565b6109ad6109a883613e04565b611e22565b6109bd60608301604084016137d2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f528460600135604051610a1f91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610a46611ebb565b610ab384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611f3e92505050565b50505050565b610ac1611ebb565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610b2957600080fd5b505af1158015610b3d573d6000803e3d6000fd5b505050505050565b610b4d611ebb565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b9c611ebb565b610ba583610f1c565b610be7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b67ffffffffffffffff831660009081526007602052604081206004018054610c0e90613cfc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a90613cfc565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610cb6838583613f41565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610cf59392919061405b565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610797565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e08611ebb565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610f155750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1591906140bf565b9392505050565b6000610692600567ffffffffffffffff84166120f4565b610f3b611ebb565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610fe7610fe2836140dc565b61210c565b60095473ffffffffffffffffffffffffffffffffffffffff161561101657611016611011836140dc565b6122d6565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a2604051806040016040528061107084602001602081019061053e91906136f0565b81526040805160208181019092526000815291015292915050565b606061109760026123f0565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff161515948201949094526003909101548084166060830152919091049091166080820152610692906123fd565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106c390613cfc565b6111a4611ebb565b73ffffffffffffffffffffffffffffffffffffffff81166111f1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610fb6565b6060600061127e60056123f0565b90506000815167ffffffffffffffff81111561129c5761129c613b00565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b50905060005b8251811015611321578281815181106112e6576112e661417e565b60200260200101518282815181106113005761130061417e565b67ffffffffffffffff909216602092830291909101909101526001016112cb565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff161515948201949094526001909101548084166060830152919091049091166080820152610692906123fd565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061143a575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15611473576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b61147e8383836124af565b505050565b61148b611ebb565b60005b8181101561147e5760008383838181106114aa576114aa61417e565b90506020028101906114bc91906141ad565b6114c5906141eb565b90506114da8160800151826020015115612599565b6114ed8160a00151826020015115612599565b8060200151156117e957805161150f9060059067ffffffffffffffff166126d2565b6115545780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b60408101515115806115695750606081015151155b156115a0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c17909116961515029590951790985590810151940151938116931690910291909117600382015591519091906004820190611781908261429f565b5060608201516005820190611796908261429f565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506117dc94939291906143b9565b60405180910390a1611900565b80516118019060059067ffffffffffffffff166126de565b6118465780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906118af6004830182613643565b6118bd600583016000613643565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b5060010161148e565b7f0000000000000000000000000000000000000000000000000000000000000000611960576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119b3576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b6119f573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846126ea565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611a2d611ebb565b611a3681612748565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf000000000000000000000000000000000000000000000000000000001480611acc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061069257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261147e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261283d565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611c865760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5891906140bf565b15611d8f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d9c8160200151612949565b6000611dab8260200151610698565b9050805160001480611dcf575080805190602001208260a001518051906020012014155b15611e0c578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016107979190613779565b611e1e82602001518360600151612a6f565b5050565b6009548151606083015160208401516040517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941693638627fad693611e869390923392600401614452565b600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610797565b565b7f0000000000000000000000000000000000000000000000000000000000000000611f95576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561202b576000838281518110611fb557611fb561417e565b60200260200101519050611fd3816002612ab690919063ffffffff16565b156120225760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611f98565b5060005b815181101561147e57600082828151811061204c5761204c61417e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361209057506120ec565b61209b600282612ad8565b156120ea5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161202f565b60008181526001830160205260408120541515610f15565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146121a15760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561224f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227391906140bf565b156122aa576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122b78160400151612afa565b6122c48160200151612b79565b611a3681602001518260600151612cc7565b60095460608201516123239173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690611b1d565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9095169463968754459461238b949392916004016144b3565b6000604051808303816000875af11580156123aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e1e9190810190614513565b60606000610f1583612d0b565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261248b82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261246f91906145b0565b85608001516fffffffffffffffffffffffffffffffff16612d66565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6124b883610f1c565b6124fa576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b612505826000612599565b67ffffffffffffffff831660009081526007602052604090206125289083612d90565b612533816000612599565b67ffffffffffffffff831660009081526007602052604090206125599060020182612d90565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161258c939291906145c3565b60405180910390a1505050565b8151156126605781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806125ef575060408201516fffffffffffffffffffffffffffffffff16155b1561262857816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107979190614646565b8015611e1e576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612699575060208201516fffffffffffffffffffffffffffffffff1615155b15611e1e57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107979190614646565b6000610f158383612f32565b6000610f158383612f81565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610ab39085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b6f565b3373ffffffffffffffffffffffffffffffffffffffff8216036127c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610797565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061289f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130749092919063ffffffff16565b80519091501561147e57808060200190518101906128bd91906140bf565b61147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610797565b61295281610f1c565b612994576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3791906140bf565b611a36576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e1e90600201827f0000000000000000000000000000000000000000000000000000000000000000613083565b6000610f158373ffffffffffffffffffffffffffffffffffffffff8416612f81565b6000610f158373ffffffffffffffffffffffffffffffffffffffff8416612f32565b7f000000000000000000000000000000000000000000000000000000000000000015611a3657612b2b600282613406565b611a36576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610797565b612b8281610f1c565b612bc4576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c619190614682565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e1e90827f0000000000000000000000000000000000000000000000000000000000000000613083565b60608160000180548060200260200160405190810160405280929190818152602001828054801561073c57602002820191906000526020600020905b815481526020019060010190808311612d475750505050509050919050565b6000612d8585612d76848661469f565b612d8090876146b6565b613435565b90505b949350505050565b8154600090612db990700100000000000000000000000000000000900463ffffffff16426145b0565b90508015612e5b5760018301548354612e01916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612d66565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612e81916fffffffffffffffffffffffffffffffff9081169116613435565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061258c908490614646565b6000818152600183016020526040812054612f7957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610692565b506000610692565b6000818152600183016020526040812054801561306a576000612fa56001836145b0565b8554909150600090612fb9906001906145b0565b905081811461301e576000866000018281548110612fd957612fd961417e565b9060005260206000200154905080876000018481548110612ffc57612ffc61417e565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061302f5761302f6146c9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610692565b6000915050610692565b6060612d88848460008561344b565b825474010000000000000000000000000000000000000000900460ff1615806130aa575081155b156130b457505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906130fa90700100000000000000000000000000000000900463ffffffff16426145b0565b905080156131ba578183111561313c576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546131769083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612d66565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156132715773ffffffffffffffffffffffffffffffffffffffff8416613219576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610797565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610797565b848310156133845760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906132b590826145b0565b6132bf878a6145b0565b6132c991906146b6565b6132d391906146f8565b905073ffffffffffffffffffffffffffffffffffffffff861661332c576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610797565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610797565b61338e85846145b0565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610f15565b60008183106134445781610f15565b5090919050565b6060824710156134dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610797565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135069190614733565b60006040518083038185875af1925050503d8060008114613543576040519150601f19603f3d011682016040523d82523d6000602084013e613548565b606091505b509150915061355987838387613564565b979650505050505050565b606083156135fa5782516000036135f35773ffffffffffffffffffffffffffffffffffffffff85163b6135f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610797565b5081612d88565b612d88838381511561360f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107979190613779565b50805461364f90613cfc565b6000825580601f1061365f575050565b601f016020900490600052602060002090810190611a3691905b8082111561368d5760008155600101613679565b5090565b6000602082840312156136a357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f1557600080fd5b803567ffffffffffffffff811681146136eb57600080fd5b919050565b60006020828403121561370257600080fd5b610f15826136d3565b60005b8381101561372657818101518382015260200161370e565b50506000910152565b6000815180845261374781602086016020860161370b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f15602083018461372f565b60006020828403121561379e57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a3657600080fd5b80356136eb816137a5565b6000602082840312156137e457600080fd5b8135610f15816137a5565b60006020828403121561380157600080fd5b813567ffffffffffffffff81111561381857600080fd5b82016101008185031215610f1557600080fd5b60008083601f84011261383d57600080fd5b50813567ffffffffffffffff81111561385557600080fd5b6020830191508360208260051b850101111561387057600080fd5b9250929050565b6000806000806040858703121561388d57600080fd5b843567ffffffffffffffff808211156138a557600080fd5b6138b18883890161382b565b909650945060208701359150808211156138ca57600080fd5b506138d78782880161382b565b95989497509550505050565b600080604083850312156138f657600080fd5b8235613901816137a5565b946020939093013593505050565b60008060006040848603121561392457600080fd5b61392d846136d3565b9250602084013567ffffffffffffffff8082111561394a57600080fd5b818601915086601f83011261395e57600080fd5b81358181111561396d57600080fd5b87602082850101111561397f57600080fd5b6020830194508093505050509250925092565b600080604083850312156139a557600080fd5b6139ae836136d3565b915060208301356139be816137a5565b809150509250929050565b6000602082840312156139db57600080fd5b813567ffffffffffffffff8111156139f257600080fd5b820160a08185031215610f1557600080fd5b602081526000825160406020840152613a20606084018261372f565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613a5b828261372f565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ab257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613a80565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ab257835167ffffffffffffffff1683529284019291840191600101613ada565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613b5357613b53613b00565b60405290565b60405160c0810167ffffffffffffffff81118282101715613b5357613b53613b00565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613bc357613bc3613b00565b604052919050565b8015158114611a3657600080fd5b80356136eb81613bcb565b80356fffffffffffffffffffffffffffffffff811681146136eb57600080fd5b600060608284031215613c1657600080fd5b6040516060810181811067ffffffffffffffff82111715613c3957613c39613b00565b6040529050808235613c4a81613bcb565b8152613c5860208401613be4565b6020820152613c6960408401613be4565b60408201525092915050565b600080600060e08486031215613c8a57600080fd5b613c93846136d3565b9250613ca28560208601613c04565b9150613cb18560808601613c04565b90509250925092565b60008060208385031215613ccd57600080fd5b823567ffffffffffffffff811115613ce457600080fd5b613cf08582860161382b565b90969095509350505050565b600181811c90821680613d1057607f821691505b602082108103613d49577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613d6157600080fd5b5051919050565b600067ffffffffffffffff821115613d8257613d82613b00565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613dbf57600080fd5b8135613dd2613dcd82613d68565b613b7c565b818152846020838601011115613de757600080fd5b816020850160208301376000918101602001919091529392505050565b60006101008236031215613e1757600080fd5b613e1f613b2f565b823567ffffffffffffffff80821115613e3757600080fd5b613e4336838701613dae565b8352613e51602086016136d3565b6020840152613e62604086016137c7565b604084015260608501356060840152613e7d608086016137c7565b608084015260a0850135915080821115613e9657600080fd5b613ea236838701613dae565b60a084015260c0850135915080821115613ebb57600080fd5b613ec736838701613dae565b60c084015260e0850135915080821115613ee057600080fd5b50613eed36828601613dae565b60e08301525092915050565b601f82111561147e576000816000526020600020601f850160051c81016020861015613f225750805b601f850160051c820191505b81811015610b3d57828155600101613f2e565b67ffffffffffffffff831115613f5957613f59613b00565b613f6d83613f678354613cfc565b83613ef9565b6000601f841160018114613fbf5760008515613f895750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611eb4565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561400e5786850135825560209485019460019092019101613fee565b5086821015614049577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60408152600061406e604083018661372f565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b6000602082840312156140d157600080fd5b8151610f1581613bcb565b600060a082360312156140ee57600080fd5b60405160a0810167ffffffffffffffff828210818311171561411257614112613b00565b81604052843591508082111561412757600080fd5b5061413436828601613dae565b825250614143602084016136d3565b60208201526040830135614156816137a5565b6040820152606083810135908201526080830135614173816137a5565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18336030181126141e157600080fd5b9190910192915050565b600061014082360312156141fe57600080fd5b614206613b59565b61420f836136d3565b815261421d60208401613bd9565b6020820152604083013567ffffffffffffffff8082111561423d57600080fd5b61424936838701613dae565b6040840152606085013591508082111561426257600080fd5b5061426f36828601613dae565b6060830152506142823660808501613c04565b60808201526142943660e08501613c04565b60a082015292915050565b815167ffffffffffffffff8111156142b9576142b9613b00565b6142cd816142c78454613cfc565b84613ef9565b602080601f83116001811461432057600084156142ea5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610b3d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561436d5788860151825594840194600190910190840161434e565b50858210156143a957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526143dd8184018761372f565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff908116606087015290870151166080850152915061441b9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613a5b565b60a08152600061446560a083018761372f565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a0602082015260006144e260a083018661372f565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b60006020828403121561452557600080fd5b815167ffffffffffffffff81111561453c57600080fd5b8201601f8101841361454d57600080fd5b805161455b613dcd82613d68565b81815285602083850101111561457057600080fd5b613a5b82602083016020860161370b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561069257610692614581565b67ffffffffffffffff8416815260e0810161460f60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612d88565b6060810161069282848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561469457600080fd5b8151610f15816137a5565b808202811582820484141761069257610692614581565b8082018082111561069257610692614581565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008261472e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082516141e181846020870161370b56fe4c6f636b52656c65617365546f6b656e506f6f6c416e6450726f787920312e352e302d646576a164736f6c6343000818000a", + Bin: "0x6101006040523480156200001257600080fd5b5060405162004fbb38038062004fbb83398101604081905262000035916200056d565b84848483838383833380600081620000945760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c757620000c78162000186565b5050506001600160a01b0384161580620000e857506001600160a01b038116155b80620000fb57506001600160a01b038216155b156200011a576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016d576040805160008152602081019091526200016d908462000231565b5050505094151560e05250620006de9650505050505050565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008b565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000252576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002dd57600083828151811062000276576200027662000690565b60209081029190910101519050620002906002826200038e565b15620002d3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000255565b5060005b81518110156200038957600082828151811062000302576200030262000690565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200032e575062000380565b6200033b600282620003ae565b156200037e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002e1565b505050565b6000620003a5836001600160a01b038416620003c5565b90505b92915050565b6000620003a5836001600160a01b038416620004c9565b60008181526001830160205260408120548015620004be576000620003ec600183620006a6565b85549091506000906200040290600190620006a6565b90508181146200046e57600086600001828154811062000426576200042662000690565b90600052602060002001549050808760000184815481106200044c576200044c62000690565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004825762000482620006c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a8565b6000915050620003a8565b60008181526001830160205260408120546200051257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a8565b506000620003a8565b6001600160a01b03811681146200053157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000557816200051b565b919050565b805180151581146200055757600080fd5b600080600080600060a086880312156200058657600080fd5b855162000593816200051b565b602087810151919650906001600160401b0380821115620005b357600080fd5b818901915089601f830112620005c857600080fd5b815181811115620005dd57620005dd62000534565b8060051b604051601f19603f8301168101818110858211171562000605576200060562000534565b60405291825284820192508381018501918c8311156200062457600080fd5b938501935b828510156200064d576200063d856200054a565b8452938501939285019262000629565b80995050505050505062000664604087016200054a565b925062000674606087016200055c565b915062000684608087016200054a565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e0516148336200078860003960008181610545015261190b0152600081816105f201528181611ffa0152612bb60152600081816105cc01528181611cd801526122ad0152600081816102ad01528181610302015281816107d0015281816108a20152818161096c015281816119cd01528181611bf801528181611ef3015281816121cd015281816123b301528181612b4c0152612da101526148336000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638da5cb5b11610145578063c0d78655116100bd578063db6327dc1161008c578063e0351e1311610071578063e0351e13146105f0578063eb521a4c14610616578063f2fde38b1461062957600080fd5b8063db6327dc146105b7578063dc0bd971146105ca57600080fd5b8063c0d7865514610569578063c4bffe2b1461057c578063c75eea9c14610591578063cf7401f3146105a457600080fd5b8063a8d87a3b11610114578063b0f479a1116100f9578063b0f479a114610512578063b794658014610530578063bb98546b1461054357600080fd5b8063a8d87a3b14610490578063af58d59f146104a357600080fd5b80638da5cb5b1461042a5780639766b932146104485780639a4575b91461045b578063a7cd63b71461047b57600080fd5b806354c8a4f3116101d857806378a010b2116101a75780637d54534e1161018c5780637d54534e146103f157806383826b2b146104045780638926f54f1461041757600080fd5b806378a010b2146103d657806379ba5097146103e957600080fd5b806354c8a4f31461037f57806366320087146103925780636cfd1553146103a55780636d3d1a58146103b857600080fd5b806321df0da71161021457806321df0da7146102ab578063240028e8146102f2578063390775371461033f578063432a6ba31461036157600080fd5b806301ffc9a7146102465780630a2fd4931461026e5780630a861f2a1461028e578063181f5a77146102a3575b600080fd5b61025961025436600461374b565b61063c565b60405190151581526020015b60405180910390f35b61028161027c3660046137aa565b610698565b6040516102659190613833565b6102a161029c366004613846565b610748565b005b6102816108f9565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610265565b61025961030036600461388c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61035261034d3660046138a9565b610915565b60405190518152602001610265565b600a5473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a161038d366004613931565b610a3e565b6102a16103a036600461399d565b610ab9565b6102a16103b336600461388c565b610b45565b60085473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a16103e43660046139c9565b610b94565b6102a1610d03565b6102a16103ff36600461388c565b610e00565b610259610412366004613a4c565b610e4f565b6102596104253660046137aa565b610f1c565b60005473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a161045636600461388c565b610f33565b61046e610469366004613a83565b610fc2565b6040516102659190613abe565b61048361108b565b6040516102659190613b1e565b6102cd61049e3660046137aa565b503090565b6104b66104b13660046137aa565b61109c565b604051610265919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102cd565b61028161053e3660046137aa565b611171565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a161057736600461388c565b61119c565b610584611270565b6040516102659190613b78565b6104b661059f3660046137aa565b611328565b6102a16105b2366004613d2f565b6113fa565b6102a16105c5366004613d74565b611483565b7f00000000000000000000000000000000000000000000000000000000000000006102cd565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a1610624366004613846565b611909565b6102a161063736600461388c565b611a25565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d40566000000000000000000000000000000000000000000000000000000001480610692575061069282611a39565b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106c390613db6565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90613db6565b801561073c5780601f106107115761010080835404028352916020019161073c565b820191906000526020600020905b81548152906001019060200180831161071f57829003601f168201915b50505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146107a0576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561082c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108509190613e09565b1015610888576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611b1d565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040518060600160405280602681526020016148016026913981565b60408051602081019091526000815261093561093083613ebe565b611bf1565b60095473ffffffffffffffffffffffffffffffffffffffff1661099c5761099773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016336060850135611b1d565b6109ad565b6109ad6109a883613ebe565b611e22565b6109bd606083016040840161388c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f528460600135604051610a1f91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610a46611f75565b610ab384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611ff892505050565b50505050565b610ac1611f75565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610b2957600080fd5b505af1158015610b3d573d6000803e3d6000fd5b505050505050565b610b4d611f75565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b9c611f75565b610ba583610f1c565b610be7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b67ffffffffffffffff831660009081526007602052604081206004018054610c0e90613db6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a90613db6565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610cb6838583613ffb565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610cf593929190614116565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610797565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e08611f75565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610f155750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f15919061417a565b9392505050565b6000610692600567ffffffffffffffff84166121ae565b610f3b611f75565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610fe7610fe283614197565b6121c6565b60095473ffffffffffffffffffffffffffffffffffffffff16156110165761101661101183614197565b612390565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a2604051806040016040528061107084602001602081019061053e91906137aa565b81526040805160208181019092526000815291015292915050565b606061109760026124aa565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff161515948201949094526003909101548084166060830152919091049091166080820152610692906124b7565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106c390613db6565b6111a4611f75565b73ffffffffffffffffffffffffffffffffffffffff81166111f1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610fb6565b6060600061127e60056124aa565b90506000815167ffffffffffffffff81111561129c5761129c613bba565b6040519080825280602002602001820160405280156112c5578160200160208202803683370190505b50905060005b8251811015611321578281815181106112e6576112e6614239565b602002602001015182828151811061130057611300614239565b67ffffffffffffffff909216602092830291909101909101526001016112cb565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff161515948201949094526001909101548084166060830152919091049091166080820152610692906124b7565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061143a575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15611473576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b61147e838383612569565b505050565b61148b611f75565b60005b8181101561147e5760008383838181106114aa576114aa614239565b90506020028101906114bc9190614268565b6114c5906142a6565b90506114da8160800151826020015115612653565b6114ed8160a00151826020015115612653565b8060200151156117e957805161150f9060059067ffffffffffffffff1661278c565b6115545780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b60408101515115806115695750606081015151155b156115a0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c17909116961515029590951790985590810151940151938116931690910291909117600382015591519091906004820190611781908261435a565b5060608201516005820190611796908261435a565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506117dc9493929190614474565b60405180910390a1611900565b80516118019060059067ffffffffffffffff16612798565b6118465780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906118af60048301826136fd565b6118bd6005830160006136fd565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b5060010161148e565b7f0000000000000000000000000000000000000000000000000000000000000000611960576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119b3576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b6119f573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846127a4565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611a2d611f75565b611a3681612802565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf000000000000000000000000000000000000000000000000000000001480611acc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061069257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261147e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526128f7565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611c865760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d58919061417a565b15611d8f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d9c8160200151612a03565b6000611dab8260200151610698565b9050805160001480611dcf575080805190602001208260a001518051906020012014155b15611e0c578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016107979190613833565b611e1e82602001518360600151612b29565b5050565b6009548151606083015160208401516040517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941693638627fad693611e86939092309260040161450d565b600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b5050505060608101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815233600482015260248101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063095ea7b3906044016020604051808303816000875af1158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e919061417a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ff6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610797565b565b7f000000000000000000000000000000000000000000000000000000000000000061204f576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156120e557600083828151811061206f5761206f614239565b6020026020010151905061208d816002612b7090919063ffffffff16565b156120dc5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101612052565b5060005b815181101561147e57600082828151811061210657612106614239565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361214a57506121a6565b612155600282612b92565b156121a45760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b6001016120e9565b60008181526001830160205260408120541515610f15565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161461225b5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015612309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232d919061417a565b15612364576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123718160400151612bb4565b61237e8160200151612c33565b611a3681602001518260600151612d81565b60095460608201516123dd9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690611b1d565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909516946396875445946124459493929160040161456e565b6000604051808303816000875af1158015612464573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e1e91908101906145ce565b60606000610f1583612dc5565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261254582606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642612529919061466b565b85608001516fffffffffffffffffffffffffffffffff16612e20565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61257283610f1c565b6125b4576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b6125bf826000612653565b67ffffffffffffffff831660009081526007602052604090206125e29083612e4a565b6125ed816000612653565b67ffffffffffffffff831660009081526007602052604090206126139060020182612e4a565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516126469392919061467e565b60405180910390a1505050565b81511561271a5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff161015806126a9575060408201516fffffffffffffffffffffffffffffffff16155b156126e257816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107979190614701565b8015611e1e576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612753575060208201516fffffffffffffffffffffffffffffffff1615155b15611e1e57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107979190614701565b6000610f158383612fec565b6000610f15838361303b565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610ab39085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b6f565b3373ffffffffffffffffffffffffffffffffffffffff821603612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610797565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612959826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661312e9092919063ffffffff16565b80519091501561147e5780806020019051810190612977919061417a565b61147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610797565b612a0c81610f1c565b612a4e576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061417a565b611a36576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e1e90600201827f000000000000000000000000000000000000000000000000000000000000000061313d565b6000610f158373ffffffffffffffffffffffffffffffffffffffff841661303b565b6000610f158373ffffffffffffffffffffffffffffffffffffffff8416612fec565b7f000000000000000000000000000000000000000000000000000000000000000015611a3657612be56002826134c0565b611a36576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610797565b612c3c81610f1c565b612c7e576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1b919061473d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e1e90827f000000000000000000000000000000000000000000000000000000000000000061313d565b60608160000180548060200260200160405190810160405280929190818152602001828054801561073c57602002820191906000526020600020905b815481526020019060010190808311612e015750505050509050919050565b6000612e3f85612e30848661475a565b612e3a9087614771565b6134ef565b90505b949350505050565b8154600090612e7390700100000000000000000000000000000000900463ffffffff164261466b565b90508015612f155760018301548354612ebb916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612e20565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612f3b916fffffffffffffffffffffffffffffffff90811691166134ef565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612646908490614701565b600081815260018301602052604081205461303357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610692565b506000610692565b6000818152600183016020526040812054801561312457600061305f60018361466b565b85549091506000906130739060019061466b565b90508181146130d857600086600001828154811061309357613093614239565b90600052602060002001549050808760000184815481106130b6576130b6614239565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130e9576130e9614784565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610692565b6000915050610692565b6060612e428484600085613505565b825474010000000000000000000000000000000000000000900460ff161580613164575081155b1561316e57505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906131b490700100000000000000000000000000000000900463ffffffff164261466b565b9050801561327457818311156131f6576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546132309083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612e20565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561332b5773ffffffffffffffffffffffffffffffffffffffff84166132d3576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610797565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610797565b8483101561343e5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061336f908261466b565b613379878a61466b565b6133839190614771565b61338d91906147b3565b905073ffffffffffffffffffffffffffffffffffffffff86166133e6576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610797565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610797565b613448858461466b565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610f15565b60008183106134fe5781610f15565b5090919050565b606082471015613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610797565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135c091906147ee565b60006040518083038185875af1925050503d80600081146135fd576040519150601f19603f3d011682016040523d82523d6000602084013e613602565b606091505b50915091506136138783838761361e565b979650505050505050565b606083156136b45782516000036136ad5773ffffffffffffffffffffffffffffffffffffffff85163b6136ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610797565b5081612e42565b612e4283838151156136c95781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107979190613833565b50805461370990613db6565b6000825580601f10613719575050565b601f016020900490600052602060002090810190611a3691905b808211156137475760008155600101613733565b5090565b60006020828403121561375d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f1557600080fd5b803567ffffffffffffffff811681146137a557600080fd5b919050565b6000602082840312156137bc57600080fd5b610f158261378d565b60005b838110156137e05781810151838201526020016137c8565b50506000910152565b600081518084526138018160208601602086016137c5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f1560208301846137e9565b60006020828403121561385857600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a3657600080fd5b80356137a58161385f565b60006020828403121561389e57600080fd5b8135610f158161385f565b6000602082840312156138bb57600080fd5b813567ffffffffffffffff8111156138d257600080fd5b82016101008185031215610f1557600080fd5b60008083601f8401126138f757600080fd5b50813567ffffffffffffffff81111561390f57600080fd5b6020830191508360208260051b850101111561392a57600080fd5b9250929050565b6000806000806040858703121561394757600080fd5b843567ffffffffffffffff8082111561395f57600080fd5b61396b888389016138e5565b9096509450602087013591508082111561398457600080fd5b50613991878288016138e5565b95989497509550505050565b600080604083850312156139b057600080fd5b82356139bb8161385f565b946020939093013593505050565b6000806000604084860312156139de57600080fd5b6139e78461378d565b9250602084013567ffffffffffffffff80821115613a0457600080fd5b818601915086601f830112613a1857600080fd5b813581811115613a2757600080fd5b876020828501011115613a3957600080fd5b6020830194508093505050509250925092565b60008060408385031215613a5f57600080fd5b613a688361378d565b91506020830135613a788161385f565b809150509250929050565b600060208284031215613a9557600080fd5b813567ffffffffffffffff811115613aac57600080fd5b820160a08185031215610f1557600080fd5b602081526000825160406020840152613ada60608401826137e9565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613b1582826137e9565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015613b6c57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613b3a565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613b6c57835167ffffffffffffffff1683529284019291840191600101613b94565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613c0d57613c0d613bba565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c0d57613c0d613bba565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613c7d57613c7d613bba565b604052919050565b8015158114611a3657600080fd5b80356137a581613c85565b80356fffffffffffffffffffffffffffffffff811681146137a557600080fd5b600060608284031215613cd057600080fd5b6040516060810181811067ffffffffffffffff82111715613cf357613cf3613bba565b6040529050808235613d0481613c85565b8152613d1260208401613c9e565b6020820152613d2360408401613c9e565b60408201525092915050565b600080600060e08486031215613d4457600080fd5b613d4d8461378d565b9250613d5c8560208601613cbe565b9150613d6b8560808601613cbe565b90509250925092565b60008060208385031215613d8757600080fd5b823567ffffffffffffffff811115613d9e57600080fd5b613daa858286016138e5565b90969095509350505050565b600181811c90821680613dca57607f821691505b602082108103613e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613e1b57600080fd5b5051919050565b600067ffffffffffffffff821115613e3c57613e3c613bba565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613e7957600080fd5b8135613e8c613e8782613e22565b613c36565b818152846020838601011115613ea157600080fd5b816020850160208301376000918101602001919091529392505050565b60006101008236031215613ed157600080fd5b613ed9613be9565b823567ffffffffffffffff80821115613ef157600080fd5b613efd36838701613e68565b8352613f0b6020860161378d565b6020840152613f1c60408601613881565b604084015260608501356060840152613f3760808601613881565b608084015260a0850135915080821115613f5057600080fd5b613f5c36838701613e68565b60a084015260c0850135915080821115613f7557600080fd5b613f8136838701613e68565b60c084015260e0850135915080821115613f9a57600080fd5b50613fa736828601613e68565b60e08301525092915050565b601f82111561147e576000816000526020600020601f850160051c81016020861015613fdc5750805b601f850160051c820191505b81811015610b3d57828155600101613fe8565b67ffffffffffffffff83111561401357614013613bba565b614027836140218354613db6565b83613fb3565b6000601f84116001811461407957600085156140435750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561410f565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140c857868501358255602094850194600190920191016140a8565b5086821015614103577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60408152600061412960408301866137e9565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b60006020828403121561418c57600080fd5b8151610f1581613c85565b600060a082360312156141a957600080fd5b60405160a0810167ffffffffffffffff82821081831117156141cd576141cd613bba565b8160405284359150808211156141e257600080fd5b506141ef36828601613e68565b8252506141fe6020840161378d565b602082015260408301356142118161385f565b604082015260608381013590820152608083013561422e8161385f565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261429c57600080fd5b9190910192915050565b600061014082360312156142b957600080fd5b6142c1613c13565b6142ca8361378d565b81526142d860208401613c93565b6020820152604083013567ffffffffffffffff808211156142f857600080fd5b61430436838701613e68565b6040840152606085013591508082111561431d57600080fd5b5061432a36828601613e68565b60608301525061433d3660808501613cbe565b608082015261434f3660e08501613cbe565b60a082015292915050565b815167ffffffffffffffff81111561437457614374613bba565b614388816143828454613db6565b84613fb3565b602080601f8311600181146143db57600084156143a55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610b3d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561442857888601518255948401946001909101908401614409565b508582101561446457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152614498818401876137e9565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506144d69050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613b15565b60a08152600061452060a08301876137e9565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a06020820152600061459d60a08301866137e9565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b6000602082840312156145e057600080fd5b815167ffffffffffffffff8111156145f757600080fd5b8201601f8101841361460857600080fd5b8051614616613e8782613e22565b81815285602083850101111561462b57600080fd5b613b158260208301602086016137c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106925761069261463c565b67ffffffffffffffff8416815260e081016146ca60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612e42565b6060810161069282848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561474f57600080fd5b8151610f158161385f565b80820281158282048414176106925761069261463c565b808201808211156106925761069261463c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000826147e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000825161429c8184602087016137c556fe4c6f636b52656c65617365546f6b656e506f6f6c416e6450726f787920312e352e302d646576a164736f6c6343000818000a", } var LockReleaseTokenPoolAndProxyABI = LockReleaseTokenPoolAndProxyMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/usdc_token_pool/usdc_token_pool.go b/core/gethwrappers/ccip/generated/usdc_token_pool/usdc_token_pool.go index a4e4f9de70..35747dd583 100644 --- a/core/gethwrappers/ccip/generated/usdc_token_pool/usdc_token_pool.go +++ b/core/gethwrappers/ccip/generated/usdc_token_pool/usdc_token_pool.go @@ -96,7 +96,7 @@ type USDCTokenPoolDomainUpdate struct { var USDCTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractITokenMessenger\",\"name\":\"tokenMessenger\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"got\",\"type\":\"uint32\"}],\"name\":\"InvalidDestinationDomain\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.DomainUpdate\",\"name\":\"domain\",\"type\":\"tuple\"}],\"name\":\"InvalidDomain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"}],\"name\":\"InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"got\",\"type\":\"uint32\"}],\"name\":\"InvalidSourceDomain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"}],\"name\":\"InvalidTokenMessengerVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"domain\",\"type\":\"uint64\"}],\"name\":\"UnknownDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnlockingUSDCFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenMessenger\",\"type\":\"address\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structUSDCTokenPool.DomainUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"DomainsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPORTED_USDC_VERSION\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getDomain\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.Domain\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_localDomainIdentifier\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_messageTransmitter\",\"outputs\":[{\"internalType\":\"contractIMessageTransmitter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_tokenMessenger\",\"outputs\":[{\"internalType\":\"contractITokenMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.DomainUpdate[]\",\"name\":\"domains\",\"type\":\"tuple[]\"}],\"name\":\"setDomains\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101406040523480156200001257600080fd5b506040516200562038038062005620833981016040819052620000359162000b4c565b838383833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c3816200041b565b5050506001600160a01b0384161580620000e457506001600160a01b038116155b80620000f757506001600160a01b038216155b1562000116576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016957604080516000815260208101909152620001699084620004c6565b5050506001600160a01b038616905062000196576040516306b7c75960e31b815260040160405180910390fd5b6000856001600160a01b0316632c1219216040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000c72565b90506000816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000266919062000c99565b905063ffffffff81161562000297576040516334697c6b60e11b815263ffffffff8216600482015260240162000087565b6000876001600160a01b0316639cdbb1816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe919062000c99565b905063ffffffff8116156200032f576040516316ba39c560e31b815263ffffffff8216600482015260240162000087565b6001600160a01b0380891660e05283166101008190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa15801562000381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a7919062000c99565b63ffffffff166101205260e051608051620003d1916001600160a01b039091169060001962000623565b6040516001600160a01b03891681527f2e902d38f15b233cbb63711add0fca4545334d3a169d60c0a616494d7eea95449060200160405180910390a1505050505050505062000de6565b336001600160a01b03821603620004755760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c051620004e7576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620005725760008382815181106200050b576200050b62000cc1565b602090810291909101015190506200052560028262000709565b1562000568576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101620004ea565b5060005b81518110156200061e57600082828151811062000597576200059762000cc1565b6020026020010151905060006001600160a01b0316816001600160a01b031603620005c3575062000615565b620005d060028262000729565b1562000613576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000576565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069b919062000cd7565b620006a7919062000d07565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000703918691906200074016565b50505050565b600062000720836001600160a01b03841662000811565b90505b92915050565b600062000720836001600160a01b03841662000915565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200078f906001600160a01b03851690849062000967565b8051909150156200061e5780806020019051810190620007b0919062000d1d565b6200061e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000087565b600081815260018301602052604081205480156200090a5760006200083860018362000d41565b85549091506000906200084e9060019062000d41565b9050818114620008ba57600086600001828154811062000872576200087262000cc1565b906000526020600020015490508087600001848154811062000898576200089862000cc1565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620008ce57620008ce62000d57565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000723565b600091505062000723565b60008181526001830160205260408120546200095e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000723565b50600062000723565b606062000978848460008562000980565b949350505050565b606082471015620009e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000087565b600080866001600160a01b0316858760405162000a01919062000d93565b60006040518083038185875af1925050503d806000811462000a40576040519150601f19603f3d011682016040523d82523d6000602084013e62000a45565b606091505b50909250905062000a598783838762000a64565b979650505050505050565b6060831562000ad857825160000362000ad0576001600160a01b0385163b62000ad05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000087565b508162000978565b62000978838381511562000aef5781518083602001fd5b8060405162461bcd60e51b815260040162000087919062000db1565b6001600160a01b038116811462000b2157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000b478162000b0b565b919050565b600080600080600060a0868803121562000b6557600080fd5b855162000b728162000b0b565b8095505060208087015162000b878162000b0b565b60408801519095506001600160401b038082111562000ba557600080fd5b818901915089601f83011262000bba57600080fd5b81518181111562000bcf5762000bcf62000b24565b8060051b604051601f19603f8301168101818110858211171562000bf75762000bf762000b24565b60405291825284820192508381018501918c83111562000c1657600080fd5b938501935b8285101562000c3f5762000c2f8562000b3a565b8452938501939285019262000c1b565b80985050505050505062000c566060870162000b3a565b915062000c666080870162000b3a565b90509295509295909350565b60006020828403121562000c8557600080fd5b815162000c928162000b0b565b9392505050565b60006020828403121562000cac57600080fd5b815163ffffffff8116811462000c9257600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000cea57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000723576200072362000cf1565b60006020828403121562000d3057600080fd5b8151801515811462000c9257600080fd5b8181038181111562000723576200072362000cf1565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000d8a57818101518382015260200162000d70565b50506000910152565b6000825162000da781846020870162000d6d565b9190910192915050565b602081526000825180602084015262000dd281604085016020870162000d6d565b601f01601f19169190910160400192915050565b60805160a05160c05160e051610100516101205161477a62000ea660003960008181610382015281816111ab01528181611e230152611e810152600081816106760152610a7801526000818161035b01526110bf01526000818161063a01528181611fab01526129f201526000818161057601528181611c21015261226101526000818161028f015281816102e401528181610b3e0152818161108c01528181611b41015281816121810152818161287c0152612bdd015261477a6000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80639a4575b91161010f578063c75eea9c116100a2578063dfadfa3511610071578063dfadfa351461059a578063e0351e1314610638578063f2fde38b1461065e578063fbf84dd71461067157600080fd5b8063c75eea9c1461053b578063cf7401f31461054e578063db6327dc14610561578063dc0bd9711461057457600080fd5b8063b0f479a1116100de578063b0f479a1146104e2578063b794658014610500578063c0d7865514610513578063c4bffe2b1461052657600080fd5b80639a4575b9146104365780639fdf13ff14610456578063a7cd63b71461045e578063af58d59f1461047357600080fd5b80636155cda01161018757806379ba50971161015657806379ba5097146103ea5780637d54534e146103f25780638926f54f146104055780638da5cb5b1461041857600080fd5b80636155cda0146103565780636b716b0d1461037d5780636d3d1a58146103b957806378a010b2146103d757600080fd5b806321df0da7116101c357806321df0da71461028d578063240028e8146102d4578063390775371461032157806354c8a4f31461034357600080fd5b806241d3c1146101f457806301ffc9a7146102095780630a2fd49314610231578063181f5a7714610251575b600080fd5b610207610202366004613587565b610698565b005b61021c6102173660046135fc565b610835565b60405190151581526020015b60405180910390f35b61024461023f366004613664565b61091a565b60405161022891906136ef565b6102446040518060400160405280601381526020017f55534443546f6b656e506f6f6c20312e342e300000000000000000000000000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610228565b61021c6102e236600461372f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61033461032f36600461374c565b6109ca565b60405190518152602001610228565b6102076103513660046137d4565b610bfc565b6102af7f000000000000000000000000000000000000000000000000000000000000000081565b6103a47f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610228565b60085473ffffffffffffffffffffffffffffffffffffffff166102af565b6102076103e5366004613840565b610c77565b610207610de6565b61020761040036600461372f565b610ee3565b61021c610413366004613664565b610f32565b60005473ffffffffffffffffffffffffffffffffffffffff166102af565b6104496104443660046138c5565b610f49565b6040516102289190613900565b6103a4600081565b610466611225565b6040516102289190613960565b610486610481366004613664565b611236565b604051610228919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102af565b61024461050e366004613664565b61130b565b61020761052136600461372f565b611336565b61052e61140a565b60405161022891906139ba565b610486610549366004613664565b6114c2565b61020761055c366004613b45565b611594565b61020761056f366004613b8c565b61161d565b7f00000000000000000000000000000000000000000000000000000000000000006102af565b61060e6105a8366004613664565b60408051606080820183526000808352602080840182905292840181905267ffffffffffffffff949094168452600982529282902082519384018352805484526001015463ffffffff811691840191909152640100000000900460ff1615159082015290565b604080518251815260208084015163ffffffff169082015291810151151590820152606001610228565b7f000000000000000000000000000000000000000000000000000000000000000061021c565b61020761066c36600461372f565b611aa3565b6102af7f000000000000000000000000000000000000000000000000000000000000000081565b6106a0611ab7565b60005b818110156107f75760008383838181106106bf576106bf613bce565b9050608002018036038101906106d59190613c11565b805190915015806106f25750604081015167ffffffffffffffff16155b1561076157604080517fa087bd2900000000000000000000000000000000000000000000000000000000815282516004820152602083015163ffffffff1660248201529082015167ffffffffffffffff1660448201526060820151151560648201526084015b60405180910390fd5b60408051606080820183528351825260208085015163ffffffff9081168285019081529286015115158486019081529585015167ffffffffffffffff166000908152600990925293902091518255516001918201805494511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169190931617929092179055016106a3565b507f1889010d2535a0ab1643678d1da87fbbe8b87b2f585b47ddb72ec622aef9ee568282604051610829929190613c8b565b60405180910390a15050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806108c857507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061091457507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061094590613d12565b80601f016020809104026020016040519081016040528092919081815260200182805461097190613d12565b80156109be5780601f10610993576101008083540402835291602001916109be565b820191906000526020600020905b8154815290600101906020018083116109a157829003601f168201915b50505050509050919050565b6040805160208101909152600081526109ea6109e583613e10565b611b3a565b60006109f960c0840184613f05565b810190610a069190613f6a565b90506000610a1760e0850185613f05565b810190610a249190613fa9565b9050610a34816000015183611d6b565b805160208201516040517f57ecfd2800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016926357ecfd2892610aab9260040161403a565b6020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee919061405f565b610b24576040517fbf969f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016336060870135611f1c565b610b79606085016040860161372f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08660600135604051610bdb91815260200190565b60405180910390a35050604080516020810190915260609092013582525090565b610c04611ab7565b610c7184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611fa992505050565b50505050565b610c7f611ab7565b610c8883610f32565b610cca576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610758565b67ffffffffffffffff831660009081526007602052604081206004018054610cf190613d12565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1d90613d12565b8015610d6a5780601f10610d3f57610100808354040283529160200191610d6a565b820191906000526020600020905b815481529060010190602001808311610d4d57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610d998385836140c4565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610dd8939291906141df565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610758565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610eeb611ab7565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610914600567ffffffffffffffff841661215f565b6040805180820190915260608082526020820152610f6e610f6983614243565b61217a565b6000600981610f836040860160208701613664565b67ffffffffffffffff168152602080820192909252604090810160002081516060810183528154815260019091015463ffffffff81169382019390935264010000000090920460ff16151590820181905290915061102a57610feb6040840160208501613664565b6040517fd201c48a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b602081015181516040517ff856ddb60000000000000000000000000000000000000000000000000000000081526060860135600482015263ffffffff90921660248301526044820181905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116606484015260848301919091526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f856ddb69060a4016020604051808303816000875af115801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e91906142e7565b6040516060860135815290915033907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a2604051806040016040528061118b86602001602081019061050e9190613664565b815260408051808201825267ffffffffffffffff851680825263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602093840190815284518085019390935251169281019290925290910190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529052949350505050565b60606112316002612344565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261091490612351565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061094590613d12565b61133e611ab7565b73ffffffffffffffffffffffffffffffffffffffff811661138b576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610829565b606060006114186005612344565b90506000815167ffffffffffffffff811115611436576114366139fc565b60405190808252806020026020018201604052801561145f578160200160208202803683370190505b50905060005b82518110156114bb5782818151811061148057611480613bce565b602002602001015182828151811061149a5761149a613bce565b67ffffffffffffffff90921660209283029190910190910152600101611465565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261091490612351565b60085473ffffffffffffffffffffffffffffffffffffffff1633148015906115d4575060005473ffffffffffffffffffffffffffffffffffffffff163314155b1561160d576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b611618838383612403565b505050565b611625611ab7565b60005b8181101561161857600083838381811061164457611644613bce565b90506020028101906116569190614304565b61165f90614342565b905061167481608001518260200151156124ed565b6116878160a001518260200151156124ed565b8060200151156119835780516116a99060059067ffffffffffffffff16612626565b6116ee5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b60408101515115806117035750606081015151155b1561173a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061191b90826143f6565b506060820151600582019061193090826143f6565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506119769493929190614510565b60405180910390a1611a9a565b805161199b9060059067ffffffffffffffff16612632565b6119e05780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff00000000000000000000000000000000000000000090811682556001820183905560028201805490911690556003810182905590611a496004830182613539565b611a57600583016000613539565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611628565b611aab611ab7565b611ab48161263e565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610758565b565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611bcf5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610758565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca1919061405f565b15611cd8576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce58160200151612733565b6000611cf4826020015161091a565b9050805160001480611d18575080805190602001208260a001518051906020012014155b15611d55578160a001516040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161075891906136ef565b611d6782602001518360600151612859565b5050565b600482015163ffffffff811615611db6576040517f68d2f8d600000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610758565b6008830151600c8401516014850151602085015163ffffffff808516911614611e215760208501516040517fe366a11700000000000000000000000000000000000000000000000000000000815263ffffffff91821660048201529084166024820152604401610758565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff1614611eb6576040517f77e4802600000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015283166024820152604401610758565b845167ffffffffffffffff828116911614611f145784516040517ff917ffea00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff91821660048201529082166024820152604401610758565b505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526116189084906128a0565b7f0000000000000000000000000000000000000000000000000000000000000000612000576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561209657600083828151811061202057612020613bce565b6020026020010151905061203e8160026129ac90919063ffffffff16565b1561208d5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101612003565b5060005b81518110156116185760008282815181106120b7576120b7613bce565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120fb5750612157565b6121066002826129ce565b156121555760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161209a565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161461220f5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610758565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156122bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e1919061405f565b15612318576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232581604001516129f0565b6123328160200151612a6f565b611ab481602001518260600151612bbd565b6060600061217383612c01565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526123df82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426123c391906145d8565b85608001516fffffffffffffffffffffffffffffffff16612c5c565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61240c83610f32565b61244e576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610758565b6124598260006124ed565b67ffffffffffffffff8316600090815260076020526040902061247c9083612c86565b6124878160006124ed565b67ffffffffffffffff831660009081526007602052604090206124ad9060020182612c86565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516124e0939291906145eb565b60405180910390a1505050565b8151156125b45781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612543575060408201516fffffffffffffffffffffffffffffffff16155b1561257c57816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610758919061466e565b8015611d67576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff161515806125ed575060208201516fffffffffffffffffffffffffffffffff1615155b15611d6757816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610758919061466e565b60006121738383612e28565b60006121738383612e77565b3373ffffffffffffffffffffffffffffffffffffffff8216036126bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610758565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61273c81610f32565b61277e576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610758565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156127fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612821919061405f565b611ab4576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b67ffffffffffffffff82166000908152600760205260409020611d6790600201827f0000000000000000000000000000000000000000000000000000000000000000612f6a565b6000612902826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132ed9092919063ffffffff16565b8051909150156116185780806020019051810190612920919061405f565b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610758565b60006121738373ffffffffffffffffffffffffffffffffffffffff8416612e77565b60006121738373ffffffffffffffffffffffffffffffffffffffff8416612e28565b7f000000000000000000000000000000000000000000000000000000000000000015611ab457612a216002826132fc565b611ab4576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610758565b612a7881610f32565b612aba576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610758565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5791906146aa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ab4576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b67ffffffffffffffff82166000908152600760205260409020611d6790827f0000000000000000000000000000000000000000000000000000000000000000612f6a565b6060816000018054806020026020016040519081016040528092919081815260200182805480156109be57602002820191906000526020600020905b815481526020019060010190808311612c3d5750505050509050919050565b6000612c7b85612c6c84866146c7565b612c7690876146de565b61332b565b90505b949350505050565b8154600090612caf90700100000000000000000000000000000000900463ffffffff16426145d8565b90508015612d515760018301548354612cf7916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612c5c565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612d77916fffffffffffffffffffffffffffffffff908116911661332b565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906124e090849061466e565b6000818152600183016020526040812054612e6f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610914565b506000610914565b60008181526001830160205260408120548015612f60576000612e9b6001836145d8565b8554909150600090612eaf906001906145d8565b9050818114612f14576000866000018281548110612ecf57612ecf613bce565b9060005260206000200154905080876000018481548110612ef257612ef2613bce565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f2557612f256146f1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610914565b6000915050610914565b825474010000000000000000000000000000000000000000900460ff161580612f91575081155b15612f9b57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612fe190700100000000000000000000000000000000900463ffffffff16426145d8565b905080156130a15781831115613023576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461305d9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612c5c565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156131585773ffffffffffffffffffffffffffffffffffffffff8416613100576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610758565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610758565b8483101561326b5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061319c90826145d8565b6131a6878a6145d8565b6131b091906146de565b6131ba9190614720565b905073ffffffffffffffffffffffffffffffffffffffff8616613213576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610758565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610758565b61327585846145d8565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6060612c7e8484600085613341565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515612173565b600081831061333a5781612173565b5090919050565b6060824710156133d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610758565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516133fc919061475b565b60006040518083038185875af1925050503d8060008114613439576040519150601f19603f3d011682016040523d82523d6000602084013e61343e565b606091505b509150915061344f8783838761345a565b979650505050505050565b606083156134f05782516000036134e95773ffffffffffffffffffffffffffffffffffffffff85163b6134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610758565b5081612c7e565b612c7e83838151156135055781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075891906136ef565b50805461354590613d12565b6000825580601f10613555575050565b601f016020900490600052602060002090810190611ab491905b80821115613583576000815560010161356f565b5090565b6000806020838503121561359a57600080fd5b823567ffffffffffffffff808211156135b257600080fd5b818501915085601f8301126135c657600080fd5b8135818111156135d557600080fd5b8660208260071b85010111156135ea57600080fd5b60209290920196919550909350505050565b60006020828403121561360e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217357600080fd5b67ffffffffffffffff81168114611ab457600080fd5b803561365f8161363e565b919050565b60006020828403121561367657600080fd5b81356121738161363e565b60005b8381101561369c578181015183820152602001613684565b50506000910152565b600081518084526136bd816020860160208601613681565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061217360208301846136a5565b73ffffffffffffffffffffffffffffffffffffffff81168114611ab457600080fd5b803561365f81613702565b60006020828403121561374157600080fd5b813561217381613702565b60006020828403121561375e57600080fd5b813567ffffffffffffffff81111561377557600080fd5b8201610100818503121561217357600080fd5b60008083601f84011261379a57600080fd5b50813567ffffffffffffffff8111156137b257600080fd5b6020830191508360208260051b85010111156137cd57600080fd5b9250929050565b600080600080604085870312156137ea57600080fd5b843567ffffffffffffffff8082111561380257600080fd5b61380e88838901613788565b9096509450602087013591508082111561382757600080fd5b5061383487828801613788565b95989497509550505050565b60008060006040848603121561385557600080fd5b83356138608161363e565b9250602084013567ffffffffffffffff8082111561387d57600080fd5b818601915086601f83011261389157600080fd5b8135818111156138a057600080fd5b8760208285010111156138b257600080fd5b6020830194508093505050509250925092565b6000602082840312156138d757600080fd5b813567ffffffffffffffff8111156138ee57600080fd5b820160a0818503121561217357600080fd5b60208152600082516040602084015261391c60608401826136a5565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261395782826136a5565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156139ae57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161397c565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139ae57835167ffffffffffffffff16835292840192918401916001016139d6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613a4f57613a4f6139fc565b60405290565b6040805190810167ffffffffffffffff81118282101715613a4f57613a4f6139fc565b60405160c0810167ffffffffffffffff81118282101715613a4f57613a4f6139fc565b8015158114611ab457600080fd5b803561365f81613a9b565b80356fffffffffffffffffffffffffffffffff8116811461365f57600080fd5b600060608284031215613ae657600080fd5b6040516060810181811067ffffffffffffffff82111715613b0957613b096139fc565b6040529050808235613b1a81613a9b565b8152613b2860208401613ab4565b6020820152613b3960408401613ab4565b60408201525092915050565b600080600060e08486031215613b5a57600080fd5b8335613b658161363e565b9250613b748560208601613ad4565b9150613b838560808601613ad4565b90509250925092565b60008060208385031215613b9f57600080fd5b823567ffffffffffffffff811115613bb657600080fd5b613bc285828601613788565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b803563ffffffff8116811461365f57600080fd5b600060808284031215613c2357600080fd5b6040516080810181811067ffffffffffffffff82111715613c4657613c466139fc565b60405282358152613c5960208401613bfd565b60208201526040830135613c6c8161363e565b60408201526060830135613c7f81613a9b565b60608201529392505050565b6020808252818101839052600090604080840186845b87811015613d05578135835263ffffffff613cbd868401613bfd565b168584015283820135613ccf8161363e565b67ffffffffffffffff1683850152606082810135613cec81613a9b565b1515908401526080928301929190910190600101613ca1565b5090979650505050505050565b600181811c90821680613d2657607f821691505b602082108103613d5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f830112613d7657600080fd5b813567ffffffffffffffff80821115613d9157613d916139fc565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613dd757613dd76139fc565b81604052838152866020858801011115613df057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215613e2357600080fd5b613e2b613a2b565b823567ffffffffffffffff80821115613e4357600080fd5b613e4f36838701613d65565b8352613e5d60208601613654565b6020840152613e6e60408601613724565b604084015260608501356060840152613e8960808601613724565b608084015260a0850135915080821115613ea257600080fd5b613eae36838701613d65565b60a084015260c0850135915080821115613ec757600080fd5b613ed336838701613d65565b60c084015260e0850135915080821115613eec57600080fd5b50613ef936828601613d65565b60e08301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f3a57600080fd5b83018035915067ffffffffffffffff821115613f5557600080fd5b6020019150368190038213156137cd57600080fd5b600060408284031215613f7c57600080fd5b613f84613a55565b8235613f8f8161363e565b8152613f9d60208401613bfd565b60208201529392505050565b600060208284031215613fbb57600080fd5b813567ffffffffffffffff80821115613fd357600080fd5b9083019060408286031215613fe757600080fd5b613fef613a55565b823582811115613ffe57600080fd5b61400a87828601613d65565b82525060208301358281111561401f57600080fd5b61402b87828601613d65565b60208301525095945050505050565b60408152600061404d60408301856136a5565b828103602084015261395781856136a5565b60006020828403121561407157600080fd5b815161217381613a9b565b601f821115611618576000816000526020600020601f850160051c810160208610156140a55750805b601f850160051c820191505b81811015611f14578281556001016140b1565b67ffffffffffffffff8311156140dc576140dc6139fc565b6140f0836140ea8354613d12565b8361407c565b6000601f841160018114614142576000851561410c5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556141d8565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156141915786850135825560209485019460019092019101614171565b50868210156141cc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6040815260006141f260408301866136a5565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a0823603121561425557600080fd5b60405160a0810167ffffffffffffffff8282108183111715614279576142796139fc565b81604052843591508082111561428e57600080fd5b5061429b36828601613d65565b82525060208301356142ac8161363e565b602082015260408301356142bf81613702565b60408201526060838101359082015260808301356142dc81613702565b608082015292915050565b6000602082840312156142f957600080fd5b81516121738161363e565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261433857600080fd5b9190910192915050565b6000610140823603121561435557600080fd5b61435d613a78565b61436683613654565b815261437460208401613aa9565b6020820152604083013567ffffffffffffffff8082111561439457600080fd5b6143a036838701613d65565b604084015260608501359150808211156143b957600080fd5b506143c636828601613d65565b6060830152506143d93660808501613ad4565b60808201526143eb3660e08501613ad4565b60a082015292915050565b815167ffffffffffffffff811115614410576144106139fc565b6144248161441e8454613d12565b8461407c565b602080601f83116001811461447757600084156144415750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f14565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144c4578886015182559484019460019091019084016144a5565b508582101561450057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152614534818401876136a5565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506145729050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610914576109146145a9565b67ffffffffffffffff8416815260e0810161463760208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612c7e565b6060810161091482848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156146bc57600080fd5b815161217381613702565b8082028115828204841417610914576109146145a9565b80820180821115610914576109146145a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614756577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000825161433881846020870161368156fea164736f6c6343000818000a", + Bin: "0x6101406040523480156200001257600080fd5b50604051620052dd380380620052dd833981016040819052620000359162000b4c565b838383833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c3816200041b565b5050506001600160a01b0384161580620000e457506001600160a01b038116155b80620000f757506001600160a01b038216155b1562000116576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016957604080516000815260208101909152620001699084620004c6565b5050506001600160a01b038616905062000196576040516306b7c75960e31b815260040160405180910390fd5b6000856001600160a01b0316632c1219216040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000c72565b90506000816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000266919062000c99565b905063ffffffff81161562000297576040516334697c6b60e11b815263ffffffff8216600482015260240162000087565b6000876001600160a01b0316639cdbb1816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe919062000c99565b905063ffffffff8116156200032f576040516316ba39c560e31b815263ffffffff8216600482015260240162000087565b6001600160a01b0380891660e05283166101008190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa15801562000381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a7919062000c99565b63ffffffff166101205260e051608051620003d1916001600160a01b039091169060001962000623565b6040516001600160a01b03891681527f2e902d38f15b233cbb63711add0fca4545334d3a169d60c0a616494d7eea95449060200160405180910390a1505050505050505062000de6565b336001600160a01b03821603620004755760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c051620004e7576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620005725760008382815181106200050b576200050b62000cc1565b602090810291909101015190506200052560028262000709565b1562000568576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101620004ea565b5060005b81518110156200061e57600082828151811062000597576200059762000cc1565b6020026020010151905060006001600160a01b0316816001600160a01b031603620005c3575062000615565b620005d060028262000729565b1562000613576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000576565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069b919062000cd7565b620006a7919062000d07565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000703918691906200074016565b50505050565b600062000720836001600160a01b03841662000811565b90505b92915050565b600062000720836001600160a01b03841662000915565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200078f906001600160a01b03851690849062000967565b8051909150156200061e5780806020019051810190620007b0919062000d1d565b6200061e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000087565b600081815260018301602052604081205480156200090a5760006200083860018362000d41565b85549091506000906200084e9060019062000d41565b9050818114620008ba57600086600001828154811062000872576200087262000cc1565b906000526020600020015490508087600001848154811062000898576200089862000cc1565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620008ce57620008ce62000d57565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000723565b600091505062000723565b60008181526001830160205260408120546200095e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000723565b50600062000723565b606062000978848460008562000980565b949350505050565b606082471015620009e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000087565b600080866001600160a01b0316858760405162000a01919062000d93565b60006040518083038185875af1925050503d806000811462000a40576040519150601f19603f3d011682016040523d82523d6000602084013e62000a45565b606091505b50909250905062000a598783838762000a64565b979650505050505050565b6060831562000ad857825160000362000ad0576001600160a01b0385163b62000ad05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000087565b508162000978565b62000978838381511562000aef5781518083602001fd5b8060405162461bcd60e51b815260040162000087919062000db1565b6001600160a01b038116811462000b2157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000b478162000b0b565b919050565b600080600080600060a0868803121562000b6557600080fd5b855162000b728162000b0b565b8095505060208087015162000b878162000b0b565b60408801519095506001600160401b038082111562000ba557600080fd5b818901915089601f83011262000bba57600080fd5b81518181111562000bcf5762000bcf62000b24565b8060051b604051601f19603f8301168101818110858211171562000bf75762000bf762000b24565b60405291825284820192508381018501918c83111562000c1657600080fd5b938501935b8285101562000c3f5762000c2f8562000b3a565b8452938501939285019262000c1b565b80985050505050505062000c566060870162000b3a565b915062000c666080870162000b3a565b90509295509295909350565b60006020828403121562000c8557600080fd5b815162000c928162000b0b565b9392505050565b60006020828403121562000cac57600080fd5b815163ffffffff8116811462000c9257600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000cea57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000723576200072362000cf1565b60006020828403121562000d3057600080fd5b8151801515811462000c9257600080fd5b8181038181111562000723576200072362000cf1565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000d8a57818101518382015260200162000d70565b50506000910152565b6000825162000da781846020870162000d6d565b9190910192915050565b602081526000825180602084015262000dd281604085016020870162000d6d565b601f01601f19169190910160400192915050565b60805160a05160c05160e051610100516101205161443762000ea6600039600081816103820152818161122401528181611e9c0152611efa0152600081816106760152610a7801526000818161035b015261113801526000818161063a01528181611f9701526128d201526000818161057601528181611c9a015261224d01526000818161028f015281816102e401528181610b260152818161110501528181611bba0152818161216d015281816128680152612abd01526144376000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80639a4575b91161010f578063c75eea9c116100a2578063dfadfa3511610071578063dfadfa351461059a578063e0351e1314610638578063f2fde38b1461065e578063fbf84dd71461067157600080fd5b8063c75eea9c1461053b578063cf7401f31461054e578063db6327dc14610561578063dc0bd9711461057457600080fd5b8063b0f479a1116100de578063b0f479a1146104e2578063b794658014610500578063c0d7865514610513578063c4bffe2b1461052657600080fd5b80639a4575b9146104365780639fdf13ff14610456578063a7cd63b71461045e578063af58d59f1461047357600080fd5b80636155cda01161018757806379ba50971161015657806379ba5097146103ea5780637d54534e146103f25780638926f54f146104055780638da5cb5b1461041857600080fd5b80636155cda0146103565780636b716b0d1461037d5780636d3d1a58146103b957806378a010b2146103d757600080fd5b806321df0da7116101c357806321df0da71461028d578063240028e8146102d4578063390775371461032157806354c8a4f31461034357600080fd5b806241d3c1146101f457806301ffc9a7146102095780630a2fd49314610231578063181f5a7714610251575b600080fd5b610207610202366004613260565b610698565b005b61021c6102173660046132d5565b610835565b60405190151581526020015b60405180910390f35b61024461023f36600461333d565b61091a565b60405161022891906133be565b6102446040518060400160405280601381526020017f55534443546f6b656e506f6f6c20312e342e300000000000000000000000000081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610228565b61021c6102e23660046133fe565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61033461032f36600461341b565b6109ca565b60405190518152602001610228565b6102076103513660046134a3565b610c75565b6102af7f000000000000000000000000000000000000000000000000000000000000000081565b6103a47f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610228565b60085473ffffffffffffffffffffffffffffffffffffffff166102af565b6102076103e536600461350f565b610cf0565b610207610e5f565b6102076104003660046133fe565b610f5c565b61021c61041336600461333d565b610fab565b60005473ffffffffffffffffffffffffffffffffffffffff166102af565b610449610444366004613594565b610fc2565b60405161022891906135cf565b6103a4600081565b61046661129e565b604051610228919061362f565b61048661048136600461333d565b6112af565b604051610228919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102af565b61024461050e36600461333d565b611384565b6102076105213660046133fe565b6113af565b61052e611483565b6040516102289190613689565b61048661054936600461333d565b61153b565b61020761055c366004613814565b61160d565b61020761056f36600461385b565b611696565b7f00000000000000000000000000000000000000000000000000000000000000006102af565b61060e6105a836600461333d565b60408051606080820183526000808352602080840182905292840181905267ffffffffffffffff949094168452600982529282902082519384018352805484526001015463ffffffff811691840191909152640100000000900460ff1615159082015290565b604080518251815260208084015163ffffffff169082015291810151151590820152606001610228565b7f000000000000000000000000000000000000000000000000000000000000000061021c565b61020761066c3660046133fe565b611b1c565b6102af7f000000000000000000000000000000000000000000000000000000000000000081565b6106a0611b30565b60005b818110156107f75760008383838181106106bf576106bf61389d565b9050608002018036038101906106d591906138e0565b805190915015806106f25750604081015167ffffffffffffffff16155b1561076157604080517fa087bd2900000000000000000000000000000000000000000000000000000000815282516004820152602083015163ffffffff1660248201529082015167ffffffffffffffff1660448201526060820151151560648201526084015b60405180910390fd5b60408051606080820183528351825260208085015163ffffffff9081168285019081529286015115158486019081529585015167ffffffffffffffff166000908152600990925293902091518255516001918201805494511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169190931617929092179055016106a3565b507f1889010d2535a0ab1643678d1da87fbbe8b87b2f585b47ddb72ec622aef9ee56828260405161082992919061395a565b60405180910390a15050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806108c857507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061091457507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610945906139e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610971906139e1565b80156109be5780601f10610993576101008083540402835291602001916109be565b820191906000526020600020905b8154815290600101906020018083116109a157829003601f168201915b50505050509050919050565b6040805160208101909152600081526109ea6109e583613adf565b611bb3565b60006109f960c0840184613bd4565b810190610a069190613c39565b90506000610a1760e0850185613bd4565b810190610a249190613c78565b9050610a34816000015183611de4565b805160208201516040517f57ecfd2800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016926357ecfd2892610aab92600401613d09565b6020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190613d2e565b610b24576040517fbf969f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006040517f095ea7b30000000000000000000000000000000000000000000000000000000081523360048201526060860135602482015273ffffffffffffffffffffffffffffffffffffffff919091169063095ea7b3906044016020604051808303816000875af1158015610bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be19190613d2e565b50610bf260608501604086016133fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08660600135604051610c5491815260200190565b60405180910390a35050604080516020810190915260609092013582525090565b610c7d611b30565b610cea84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611f9592505050565b50505050565b610cf8611b30565b610d0183610fab565b610d43576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610758565b67ffffffffffffffff831660009081526007602052604081206004018054610d6a906139e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d96906139e1565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610e12838583613d93565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610e5193929190613eae565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610758565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f64611b30565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610914600567ffffffffffffffff841661214b565b6040805180820190915260608082526020820152610fe7610fe283613f12565b612166565b6000600981610ffc604086016020870161333d565b67ffffffffffffffff168152602080820192909252604090810160002081516060810183528154815260019091015463ffffffff81169382019390935264010000000090920460ff1615159082018190529091506110a357611064604084016020850161333d565b6040517fd201c48a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b602081015181516040517ff856ddb60000000000000000000000000000000000000000000000000000000081526060860135600482015263ffffffff90921660248301526044820181905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116606484015260848301919091526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f856ddb69060a4016020604051808303816000875af1158015611183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a79190613fb6565b6040516060860135815290915033907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a2604051806040016040528061120486602001602081019061050e919061333d565b815260408051808201825267ffffffffffffffff851680825263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602093840190815284518085019390935251169281019290925290910190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529052949350505050565b60606112aa6002612330565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526109149061233d565b67ffffffffffffffff81166000908152600760205260409020600501805460609190610945906139e1565b6113b7611b30565b73ffffffffffffffffffffffffffffffffffffffff8116611404576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610829565b606060006114916005612330565b90506000815167ffffffffffffffff8111156114af576114af6136cb565b6040519080825280602002602001820160405280156114d8578160200160208202803683370190505b50905060005b8251811015611534578281815181106114f9576114f961389d565b60200260200101518282815181106115135761151361389d565b67ffffffffffffffff909216602092830291909101909101526001016114de565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526109149061233d565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061164d575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15611686576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b6116918383836123ef565b505050565b61169e611b30565b60005b818110156116915760008383838181106116bd576116bd61389d565b90506020028101906116cf9190613fd3565b6116d890614011565b90506116ed81608001518260200151156124d9565b6117008160a001518260200151156124d9565b8060200151156119fc5780516117229060059067ffffffffffffffff16612612565b6117675780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b604081015151158061177c5750606081015151155b156117b3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061199490826140c5565b50606082015160058201906119a990826140c5565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506119ef94939291906141df565b60405180910390a1611b13565b8051611a149060059067ffffffffffffffff1661261e565b611a595780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610758565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff00000000000000000000000000000000000000000090811682556001820183905560028201805490911690556003810182905590611ac26004830182613212565b611ad0600583016000613212565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016116a1565b611b24611b30565b611b2d8161262a565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610758565b565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611c485760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610758565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1a9190613d2e565b15611d51576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d5e816020015161271f565b6000611d6d826020015161091a565b9050805160001480611d91575080805190602001208260a001518051906020012014155b15611dce578160a001516040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161075891906133be565b611de082602001518360600151612845565b5050565b600482015163ffffffff811615611e2f576040517f68d2f8d600000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610758565b6008830151600c8401516014850151602085015163ffffffff808516911614611e9a5760208501516040517fe366a11700000000000000000000000000000000000000000000000000000000815263ffffffff91821660048201529084166024820152604401610758565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff1614611f2f576040517f77e4802600000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015283166024820152604401610758565b845167ffffffffffffffff828116911614611f8d5784516040517ff917ffea00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff91821660048201529082166024820152604401610758565b505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000611fec576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561208257600083828151811061200c5761200c61389d565b6020026020010151905061202a81600261288c90919063ffffffff16565b156120795760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611fef565b5060005b81518110156116915760008282815181106120a3576120a361389d565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e75750612143565b6120f26002826128ae565b156121415760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101612086565b600081815260018301602052604081205415155b9392505050565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146121fb5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610758565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190613d2e565b15612304576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61231181604001516128d0565b61231e816020015161294f565b611b2d81602001518260600151612a9d565b6060600061215f83612ae1565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526123cb82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426123af91906142a7565b85608001516fffffffffffffffffffffffffffffffff16612b3c565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6123f883610fab565b61243a576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610758565b6124458260006124d9565b67ffffffffffffffff831660009081526007602052604090206124689083612b66565b6124738160006124d9565b67ffffffffffffffff831660009081526007602052604090206124999060020182612b66565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516124cc939291906142ba565b60405180910390a1505050565b8151156125a05781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061252f575060408201516fffffffffffffffffffffffffffffffff16155b1561256857816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610758919061433d565b8015611de0576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff161515806125d9575060208201516fffffffffffffffffffffffffffffffff1615155b15611de057816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610758919061433d565b600061215f8383612d08565b600061215f8383612d57565b3373ffffffffffffffffffffffffffffffffffffffff8216036126a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610758565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61272881610fab565b61276a576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610758565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156127e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280d9190613d2e565b611b2d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b67ffffffffffffffff82166000908152600760205260409020611de090600201827f0000000000000000000000000000000000000000000000000000000000000000612e4a565b600061215f8373ffffffffffffffffffffffffffffffffffffffff8416612d57565b600061215f8373ffffffffffffffffffffffffffffffffffffffff8416612d08565b7f000000000000000000000000000000000000000000000000000000000000000015611b2d576129016002826131cd565b611b2d576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610758565b61295881610fab565b61299a576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610758565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a379190614379565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b2d576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610758565b67ffffffffffffffff82166000908152600760205260409020611de090827f0000000000000000000000000000000000000000000000000000000000000000612e4a565b6060816000018054806020026020016040519081016040528092919081815260200182805480156109be57602002820191906000526020600020905b815481526020019060010190808311612b1d5750505050509050919050565b6000612b5b85612b4c8486614396565b612b5690876143ad565b6131fc565b90505b949350505050565b8154600090612b8f90700100000000000000000000000000000000900463ffffffff16426142a7565b90508015612c315760018301548354612bd7916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b3c565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612c57916fffffffffffffffffffffffffffffffff90811691166131fc565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906124cc90849061433d565b6000818152600183016020526040812054612d4f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610914565b506000610914565b60008181526001830160205260408120548015612e40576000612d7b6001836142a7565b8554909150600090612d8f906001906142a7565b9050818114612df4576000866000018281548110612daf57612daf61389d565b9060005260206000200154905080876000018481548110612dd257612dd261389d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0557612e056143c0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610914565b6000915050610914565b825474010000000000000000000000000000000000000000900460ff161580612e71575081155b15612e7b57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612ec190700100000000000000000000000000000000900463ffffffff16426142a7565b90508015612f815781831115612f03576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612f3d9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b3c565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156130385773ffffffffffffffffffffffffffffffffffffffff8416612fe0576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610758565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610758565b8483101561314b5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061307c90826142a7565b613086878a6142a7565b61309091906143ad565b61309a91906143ef565b905073ffffffffffffffffffffffffffffffffffffffff86166130f3576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610758565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610758565b61315585846142a7565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561215f565b600081831061320b578161215f565b5090919050565b50805461321e906139e1565b6000825580601f1061322e575050565b601f016020900490600052602060002090810190611b2d91905b8082111561325c5760008155600101613248565b5090565b6000806020838503121561327357600080fd5b823567ffffffffffffffff8082111561328b57600080fd5b818501915085601f83011261329f57600080fd5b8135818111156132ae57600080fd5b8660208260071b85010111156132c357600080fd5b60209290920196919550909350505050565b6000602082840312156132e757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461215f57600080fd5b67ffffffffffffffff81168114611b2d57600080fd5b803561333881613317565b919050565b60006020828403121561334f57600080fd5b813561215f81613317565b6000815180845260005b8181101561338057602081850181015186830182015201613364565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061215f602083018461335a565b73ffffffffffffffffffffffffffffffffffffffff81168114611b2d57600080fd5b8035613338816133d1565b60006020828403121561341057600080fd5b813561215f816133d1565b60006020828403121561342d57600080fd5b813567ffffffffffffffff81111561344457600080fd5b8201610100818503121561215f57600080fd5b60008083601f84011261346957600080fd5b50813567ffffffffffffffff81111561348157600080fd5b6020830191508360208260051b850101111561349c57600080fd5b9250929050565b600080600080604085870312156134b957600080fd5b843567ffffffffffffffff808211156134d157600080fd5b6134dd88838901613457565b909650945060208701359150808211156134f657600080fd5b5061350387828801613457565b95989497509550505050565b60008060006040848603121561352457600080fd5b833561352f81613317565b9250602084013567ffffffffffffffff8082111561354c57600080fd5b818601915086601f83011261356057600080fd5b81358181111561356f57600080fd5b87602082850101111561358157600080fd5b6020830194508093505050509250925092565b6000602082840312156135a657600080fd5b813567ffffffffffffffff8111156135bd57600080fd5b820160a0818503121561215f57600080fd5b6020815260008251604060208401526135eb606084018261335a565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613626828261335a565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561367d57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161364b565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561367d57835167ffffffffffffffff16835292840192918401916001016136a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561371e5761371e6136cb565b60405290565b6040805190810167ffffffffffffffff8111828210171561371e5761371e6136cb565b60405160c0810167ffffffffffffffff8111828210171561371e5761371e6136cb565b8015158114611b2d57600080fd5b80356133388161376a565b80356fffffffffffffffffffffffffffffffff8116811461333857600080fd5b6000606082840312156137b557600080fd5b6040516060810181811067ffffffffffffffff821117156137d8576137d86136cb565b60405290508082356137e98161376a565b81526137f760208401613783565b602082015261380860408401613783565b60408201525092915050565b600080600060e0848603121561382957600080fd5b833561383481613317565b925061384385602086016137a3565b915061385285608086016137a3565b90509250925092565b6000806020838503121561386e57600080fd5b823567ffffffffffffffff81111561388557600080fd5b61389185828601613457565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b803563ffffffff8116811461333857600080fd5b6000608082840312156138f257600080fd5b6040516080810181811067ffffffffffffffff82111715613915576139156136cb565b60405282358152613928602084016138cc565b6020820152604083013561393b81613317565b6040820152606083013561394e8161376a565b60608201529392505050565b6020808252818101839052600090604080840186845b878110156139d4578135835263ffffffff61398c8684016138cc565b16858401528382013561399e81613317565b67ffffffffffffffff16838501526060828101356139bb8161376a565b1515908401526080928301929190910190600101613970565b5090979650505050505050565b600181811c908216806139f557607f821691505b602082108103613a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f830112613a4557600080fd5b813567ffffffffffffffff80821115613a6057613a606136cb565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613aa657613aa66136cb565b81604052838152866020858801011115613abf57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215613af257600080fd5b613afa6136fa565b823567ffffffffffffffff80821115613b1257600080fd5b613b1e36838701613a34565b8352613b2c6020860161332d565b6020840152613b3d604086016133f3565b604084015260608501356060840152613b58608086016133f3565b608084015260a0850135915080821115613b7157600080fd5b613b7d36838701613a34565b60a084015260c0850135915080821115613b9657600080fd5b613ba236838701613a34565b60c084015260e0850135915080821115613bbb57600080fd5b50613bc836828601613a34565b60e08301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c0957600080fd5b83018035915067ffffffffffffffff821115613c2457600080fd5b60200191503681900382131561349c57600080fd5b600060408284031215613c4b57600080fd5b613c53613724565b8235613c5e81613317565b8152613c6c602084016138cc565b60208201529392505050565b600060208284031215613c8a57600080fd5b813567ffffffffffffffff80821115613ca257600080fd5b9083019060408286031215613cb657600080fd5b613cbe613724565b823582811115613ccd57600080fd5b613cd987828601613a34565b825250602083013582811115613cee57600080fd5b613cfa87828601613a34565b60208301525095945050505050565b604081526000613d1c604083018561335a565b8281036020840152613626818561335a565b600060208284031215613d4057600080fd5b815161215f8161376a565b601f821115611691576000816000526020600020601f850160051c81016020861015613d745750805b601f850160051c820191505b81811015611f8d57828155600101613d80565b67ffffffffffffffff831115613dab57613dab6136cb565b613dbf83613db983546139e1565b83613d4b565b6000601f841160018114613e115760008515613ddb5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613ea7565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613e605786850135825560209485019460019092019101613e40565b5086821015613e9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000613ec1604083018661335a565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060a08236031215613f2457600080fd5b60405160a0810167ffffffffffffffff8282108183111715613f4857613f486136cb565b816040528435915080821115613f5d57600080fd5b50613f6a36828601613a34565b8252506020830135613f7b81613317565b60208201526040830135613f8e816133d1565b6040820152606083810135908201526080830135613fab816133d1565b608082015292915050565b600060208284031215613fc857600080fd5b815161215f81613317565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261400757600080fd5b9190910192915050565b6000610140823603121561402457600080fd5b61402c613747565b6140358361332d565b815261404360208401613778565b6020820152604083013567ffffffffffffffff8082111561406357600080fd5b61406f36838701613a34565b6040840152606085013591508082111561408857600080fd5b5061409536828601613a34565b6060830152506140a836608085016137a3565b60808201526140ba3660e085016137a3565b60a082015292915050565b815167ffffffffffffffff8111156140df576140df6136cb565b6140f3816140ed84546139e1565b84613d4b565b602080601f83116001811461414657600084156141105750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f8d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561419357888601518255948401946001909101908401614174565b50858210156141cf57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526142038184018761335a565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506142419050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613626565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561091457610914614278565b67ffffffffffffffff8416815260e0810161430660208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612b5e565b6060810161091482848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561438b57600080fd5b815161215f816133d1565b808202811582820484141761091457610914614278565b8082018082111561091457610914614278565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614425577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", } var USDCTokenPoolABI = USDCTokenPoolMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index ef84a7d75b..034a89f133 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,21 +1,21 @@ GETH_VERSION: 1.13.8 arm_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 1a0abacf84def916519013f713b667f106434a091af8b9f441e12cc90aa2cdf8 arm_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin 62d9963a998b8e5c4b9bfa537e916559c167863329c40e9a75eb4defebceb810 -burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 1bbffb552c3256097fbe61a430de408073816f40e17b17b102b793527d44f046 -burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin 5be8832498c8aab49957bfff94fbb1d22373833d1d56f5d8ace259343b27fc24 -burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 9215cb5efe441e9893f871de31b4a5d4171c479f276aac4084046514990f1bd6 +burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin 02e37792e25155ab4e7e4b4211002180789d0c1559cad1e38d3bd70efe0fb7d6 +burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 4b1b468de62a7e9adffd4d8ccb3621a7e0658ae453a4bfa72493ae25362e9693 +burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin b1c6188532aacf44b81d833c123131b81e0fd3ee7ef95ba29a9ba1b6ff6b30c9 +burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 94c361ae328eca24b24ce236080ff2e898cc037ee0d4cd1f3802f7ee75d7cc8d ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 970bf6a2a817813eb3302c92ec3ad0bc0fc6c2e693f33c13f57733d003f44d0d ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin fcced2263564f51b5bf086c221e813ec06a71d2bb2e246b4e28cd60098a6de6f commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin ddc26c10c2a52b59624faae9005827b09b98db4566887a736005e8cc37cf8a51 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin ebd8aac686fa28a71d4212bcd25a28f8f640d50dce5e50498b2f6b8534890b69 ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de -evm_2_evm_multi_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin 10a0cbf8290778fce7e9aaf193aaffaa566bc55d0168b8876f94ceb14ff7cd30 +evm_2_evm_multi_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin cb1c4d1bd8460181f1545524bc2537a58f6839ee0acad6a068f5e24216a9cee9 evm_2_evm_multi_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.bin 15cd5695049ab4be1f396ec1d7b609738b2bcefa3740a7a48316e1f72506a34a -evm_2_evm_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin bdafc343d33f1eb753871ea6d215339cd8e087c1a8c7297257791dd1e453be8f +evm_2_evm_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin ea2a9622ace941075ea62cd348e9c69c5aa3bf8a7daf298fea51984f80a1d27d evm_2_evm_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.bin bf1a3090a2f8d1632b82a6d45200cf6f3833a1e27303745405c1ed13ffc0cf83 -lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin f049909cfef0aa3b8158c85e7b64516b9d7b32f4930705574090e5b9cab534b1 -lock_release_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.bin d897366aa5c58f426eaf3fc748d9def8f78111d9ac8c122e390952f640de22fc +lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin ee60ad24918c9652ef4b251236dd3390cce651b685e94532bf3bde2a111fe6b9 +lock_release_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.bin e23f4fd063eb3a289d651016ac45fcef72607ce2b571cba134e2bf35590c114d maybe_revert_message_receiver: ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin d73956c26232ebcc4a5444429fa99cbefed960e323be9b5a24925885c2e477d5 message_hasher: ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin 1d5146d43e1b99cd2d6f9f06475be19087e4349f7cee0fdbbf134ba65e967c93 mock_arm_contract: ../../../contracts/solc/v0.8.24/MockRMN1_0/MockRMN.abi ../../../contracts/solc/v0.8.24/MockRMN1_0/MockRMN.bin e7a3a6c3eda5fb882e16bcc2b4340f78523acb67907bcdcaf3c8ffc51488688e @@ -34,5 +34,5 @@ router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/sol self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 86e169636e5633854ed0b709c804066b615040bceba25aa5137450fbe6f76fa3 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin fb06d2cf5f7476e512c6fb7aab8eab43545efd7f0f6ca133c64ff4e3963902c4 token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 7c01fd89f5153baa4d7409d14beabb3f861abfbf8880d3c6d06802cc398570f9 -usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin e259cffee304678cfce3632f122cf96ecc06b4ab01905940cd0111f2fd50e4d8 +usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin b92eaf3434896056300f38f4ad0fa8b84879e9dea2e6240a67e48688c09bf06b weth9: ../../../contracts/solc/v0.8.24/WETH9/WETH9.abi ../../../contracts/solc/v0.8.24/WETH9/WETH9.bin 2970d79a0ca6dd6279cde130de45e56c8790ed695eae477fb5ba4c1bb75b720d