From d408f33a1e079eb3542f8ba5f41c86c319f9548b Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 17 Dec 2024 12:16:26 -0500 Subject: [PATCH 01/15] New Modified ERC165Checker library --- contracts/.changeset/violet-lamps-pump.md | 5 + contracts/gas-snapshots/ccip.gas-snapshot | 153 +++++++++--------- .../src/v0.8/ccip/libraries/ERC165Checker.sol | 133 +++++++++++++++ contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 10 +- .../ccip/test/libraries/ERC165Checker.t.sol | 40 +++++ 5 files changed, 262 insertions(+), 79 deletions(-) create mode 100644 contracts/.changeset/violet-lamps-pump.md create mode 100644 contracts/src/v0.8/ccip/libraries/ERC165Checker.sol create mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol diff --git a/contracts/.changeset/violet-lamps-pump.md b/contracts/.changeset/violet-lamps-pump.md new file mode 100644 index 00000000000..6d413f0f0bd --- /dev/null +++ b/contracts/.changeset/violet-lamps-pump.md @@ -0,0 +1,5 @@ +--- +'@chainlink/contracts': patch +--- + +Create a new version of the ERC165Checker library which checks for sufficient gas before making an external call to prevent message delivery issues. #bugfix diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 147783b52cb..5bf8866f744 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -68,7 +68,8 @@ CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 9885) DefensiveExampleTest:test_HappyPath_Success() (gas: 200540) DefensiveExampleTest:test_Recovery() (gas: 425013) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1512391) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1512931) +ERC165CheckerTest:test_supportsInterface() (gas: 8450) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) @@ -351,11 +352,11 @@ NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123604) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45986) NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889) NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12169) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 185821) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 152976) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 189296) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 252384) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 220672) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 185881) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 153036) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 189356) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 252504) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 220732) NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60520) NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37979) NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38756) @@ -365,7 +366,7 @@ NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105300) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166146) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 195937) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 140158) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5903354) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5909973) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626094) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166505) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16719) @@ -376,21 +377,21 @@ OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72724) OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 284695) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177591) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333573) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 276839) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168529) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188173) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 156527) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 545431) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177651) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333753) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277019) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168589) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188293) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 156587) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 545791) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10643) OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92450) OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63117) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 69655) OffRamp_commit:test_InvalidInterval_Revert() (gas: 65803) OffRamp_commit:test_InvalidRootRevert() (gas: 64898) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6664144) -OffRamp_commit:test_NoConfig_Revert() (gas: 6247562) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670763) +OffRamp_commit:test_NoConfig_Revert() (gas: 6254181) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112728) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 120561) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112660) @@ -405,92 +406,92 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125027) OffRamp_commit:test_Unhealthy_Revert() (gas: 60177) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206221) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53305) -OffRamp_constructor:test_Constructor_Success() (gas: 6210339) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137118) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103828) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101677) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162599) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101597) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101598) +OffRamp_constructor:test_Constructor_Success() (gas: 6216958) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137127) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103837) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101686) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162609) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101606) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101607) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17532) -OffRamp_execute:test_LargeBatch_Success() (gas: 3378447) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371209) -OffRamp_execute:test_MultipleReports_Success() (gas: 298806) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7072622) -OffRamp_execute:test_NoConfig_Revert() (gas: 6297092) +OffRamp_execute:test_LargeBatch_Success() (gas: 3380247) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371269) +OffRamp_execute:test_MultipleReports_Success() (gas: 298986) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079301) +OffRamp_execute:test_NoConfig_Revert() (gas: 6303771) OffRamp_execute:test_NonArray_Revert() (gas: 27572) -OffRamp_execute:test_SingleReport_Success() (gas: 175631) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147790) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6964290) +OffRamp_execute:test_SingleReport_Success() (gas: 175691) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147850) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6970909) OffRamp_execute:test_ZeroReports_Revert() (gas: 17248) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56213) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56273) OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 238130) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 91994) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 268223) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 238250) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 92054) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 268403) OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28659) OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 15530) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 474738) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 474978) OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48296) OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 34101) OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28824) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187677) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197809) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187737) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197869) OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40687) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 405023) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248786) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192430) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212456) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243699) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141510) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 402622) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 405083) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248906) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192550) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212576) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243719) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141570) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 402802) OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58242) OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73812) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 574336) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 522887) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 574696) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 523247) OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 26795) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 540963) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 540910) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 452000) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135231) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164892) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 541323) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 541270) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 452360) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135291) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164952) OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3905742) OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 121048) OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89737) OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81694) OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74284) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172639) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 213251) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172699) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 213371) OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27248) OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165935) OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27774) OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55362) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 489669) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 314861) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2224794) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165330) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226161) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226701) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 774719) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344726) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37632) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101465) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36790) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91430) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 83518) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 168872) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 62822) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 78426) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 170742) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 181981) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 489789) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 315041) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2224914) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165390) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226281) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226821) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 775319) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344966) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37652) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101525) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36850) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91490) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 83578) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 168992) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 62882) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 78486) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 170862) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 182101) OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11465) OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13975) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47491) OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25464) -OffRamp_trialExecute:test_trialExecute() (gas: 271859) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127545) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138855) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289500) +OffRamp_trialExecute:test_trialExecute() (gas: 272039) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127605) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138915) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289680) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251641) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67101) diff --git a/contracts/src/v0.8/ccip/libraries/ERC165Checker.sol b/contracts/src/v0.8/ccip/libraries/ERC165Checker.sol new file mode 100644 index 00000000000..2baae61825d --- /dev/null +++ b/contracts/src/v0.8/ccip/libraries/ERC165Checker.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IERC165} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/utils/introspection/IERC165.sol"; + +/** + * @dev Library used to query support of an interface declared via {IERC165}. + * + * Note that these functions return the actual result of the query: they do not + * `revert` if an interface is not supported. It is up to the caller to decide + * what to do in these cases. + * + * Note this is exactly the same as the OZ version, with the exception that external calls will revert + * if < 30_000 gas is available, to prevent message delivery issues in CCIP. + */ +library ERC165Checker { + // As per the EIP-165 spec, no interface should ever match 0xffffffff + bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff; + + error NotEnoughGasForSupportsInterfaceCall(); + + /** + * @dev Returns true if `account` supports the {IERC165} interface. + */ + function _supportsERC165( + address account + ) internal view returns (bool) { + // Any contract that implements ERC165 must explicitly indicate support of + // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid + return _supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) + && !_supportsERC165InterfaceUnchecked(account, _INTERFACE_ID_INVALID); + } + + /** + * @dev Returns true if `account` supports the interface defined by + * `interfaceId`. Support for {IERC165} itself is queried automatically. + * + * See {IERC165-supportsInterface}. + */ + function _supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { + // query support of both ERC165 as per the spec and support of _interfaceId + return _supportsERC165(account) && _supportsERC165InterfaceUnchecked(account, interfaceId); + } + + /** + * @dev Returns a boolean array where each value corresponds to the + * interfaces passed in and whether they're supported or not. This allows + * you to batch check interfaces for a contract where your expectation + * is that some interfaces may not be supported. + * + * See {IERC165-supportsInterface}. + * + * _Available since v3.4._ + */ + function _getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) { + // an array of booleans corresponding to interfaceIds and whether they're supported or not + bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); + + // query support of ERC165 itself + if (_supportsERC165(account)) { + // query support of each interface in interfaceIds + for (uint256 i = 0; i < interfaceIds.length; i++) { + interfaceIdsSupported[i] = _supportsERC165InterfaceUnchecked(account, interfaceIds[i]); + } + } + + return interfaceIdsSupported; + } + + /** + * @dev Returns true if `account` supports all the interfaces defined in + * `interfaceIds`. Support for {IERC165} itself is queried automatically. + * + * Batch-querying can lead to gas savings by skipping repeated checks for + * {IERC165} support. + * + * See {IERC165-supportsInterface}. + */ + function _supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) { + // query support of ERC165 itself + if (!_supportsERC165(account)) { + return false; + } + + // query support of each interface in interfaceIds + for (uint256 i = 0; i < interfaceIds.length; i++) { + if (!_supportsERC165InterfaceUnchecked(account, interfaceIds[i])) { + return false; + } + } + + // all interfaces supported + return true; + } + + /** + * @notice Query if a contract implements an interface, does not check ERC165 support + * @param account The address of the contract to query for support of an interface + * @param interfaceId The interface identifier, as specified in ERC-165 + * @return true if the contract at account indicates support of the interface with + * identifier interfaceId, false otherwise + * @dev Assumes that account contains a contract that supports ERC165, otherwise + * the behavior of this method is undefined. This precondition can be checked + * with {supportsERC165}. + * + * Some precompiled contracts will falsely indicate support for a given interface, so caution + * should be exercised when using this function. + * + * Interface identification is specified in ERC-165. + */ + function _supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) { + // prepare call + bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); + + // perform static call + bool success; + uint256 returnSize; + uint256 returnValue; + + // Enforce that there's enough gas avilable so that the call will not fail due to OOG error. Without this + // supportsInterface() may return false when it should return true. + if (gasleft() < 30_000) revert NotEnoughGasForSupportsInterfaceCall(); + + assembly { + success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20) + returnSize := returndatasize() + returnValue := mload(0x00) + } + + return success && returnSize >= 0x20 && returnValue > 0; + } +} diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 76424b4e2a7..4e8f4724d89 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -13,13 +13,14 @@ import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {CallWithExactGas} from "../../shared/call/CallWithExactGas.sol"; import {Client} from "../libraries/Client.sol"; + +import {ERC165Checker} from "../libraries/ERC165Checker.sol"; import {Internal} from "../libraries/Internal.sol"; import {MerkleMultiProof} from "../libraries/MerkleMultiProof.sol"; import {Pool} from "../libraries/Pool.sol"; import {MultiOCR3Base} from "../ocr/MultiOCR3Base.sol"; import {IERC20} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/token/ERC20/IERC20.sol"; -import {ERC165Checker} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/ERC165Checker.sol"; import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/structs/EnumerableSet.sol"; /// @notice OffRamp enables OCR networks to execute multiple messages in an OffRamp in a single transaction. @@ -604,9 +605,12 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // 3. If the receiver is a contract but it does not support the IAny2EVMMessageReceiver interface. // // The ordering of these checks is important, as the first check is the cheapest to execute. + // + // To prevent message delivery bypass issues, a modified version of the ERC165Checker is used exclusively here + // which checks for sufficient gas before making the external call. if ( (message.data.length == 0 && message.gasLimit == 0) || message.receiver.code.length == 0 - || !message.receiver.supportsInterface(type(IAny2EVMMessageReceiver).interfaceId) + || !message.receiver._supportsInterface(type(IAny2EVMMessageReceiver).interfaceId) ) return; (bool success, bytes memory returnData,) = s_sourceChainConfigs[message.header.sourceChainSelector] @@ -647,7 +651,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // This is done to prevent a pool from reverting the entire transaction if it doesn't support the interface. // The call gets a max or 30k gas per instance, of which there are three. This means offchain gas estimations should // account for 90k gas overhead due to the interface check. - if (localPoolAddress == address(0) || !localPoolAddress.supportsInterface(Pool.CCIP_POOL_V1)) { + if (localPoolAddress == address(0) || !localPoolAddress._supportsInterface(Pool.CCIP_POOL_V1)) { revert NotACompatiblePool(localPoolAddress); } diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol new file mode 100644 index 00000000000..2c0e822737c --- /dev/null +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver.sol"; + +import {ERC165Checker} from "../../libraries/ERC165Checker.sol"; +import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol"; + +import {Test} from "forge-std/Test.sol"; + +contract ERC165CheckerTest is Test { + using ERC165Checker for address; + + MaybeRevertMessageReceiver internal s_receiver; + + bytes4 public constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; + + constructor() { + s_receiver = new MaybeRevertMessageReceiver(false); + } + + function test_supportsInterface() public view { + assertTrue(s_receiver.supportsInterface(type(IAny2EVMMessageReceiver).interfaceId)); + } + + function test_supportsInterface_RevertWhen_NotEnoughGasForSupportsInterface() public { + vm.expectRevert(ERC165Checker.NotEnoughGasForSupportsInterfaceCall.selector); + + // Library calls cannot be called with gas limit overrides, so a public function must be exposed + // instead which can proxy the call to the library. + + // The gas limit was chosen so that after overhead, <30k would remain to trigger the error. + this.invokeERC165Checker{gas: 35_000}(); + } + + // Meant to test the call with a manual gas limit override + function invokeERC165Checker() external view { + address(s_receiver)._supportsInterface(EXAMPLE_INTERFACE_ID); + } +} From e617a8f7f53e607825503b5ecf08a1f943126bd5 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:20:46 +0000 Subject: [PATCH 02/15] [Bot] Update changeset file with jira issues --- contracts/.changeset/violet-lamps-pump.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/.changeset/violet-lamps-pump.md b/contracts/.changeset/violet-lamps-pump.md index 6d413f0f0bd..4b180df24cd 100644 --- a/contracts/.changeset/violet-lamps-pump.md +++ b/contracts/.changeset/violet-lamps-pump.md @@ -3,3 +3,8 @@ --- Create a new version of the ERC165Checker library which checks for sufficient gas before making an external call to prevent message delivery issues. #bugfix + + +PR issue: CCIP-4659 + +Solidity Review issue: CCIP-3966 \ No newline at end of file From cef944cd72606b9071ca5168bcae34a1199bdd26 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 17 Dec 2024 12:22:37 -0500 Subject: [PATCH 03/15] fix gas snapshot --- contracts/gas-snapshots/ccip.gas-snapshot | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index c4399ce376b..e5472fc1b76 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -68,7 +68,7 @@ CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 9885) DefensiveExampleTest:test_HappyPath_Success() (gas: 200540) DefensiveExampleTest:test_Recovery() (gas: 425013) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1512665) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1513205) ERC165CheckerTest:test_supportsInterface() (gas: 8450) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) @@ -488,10 +488,10 @@ OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11465) OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13975) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47491) OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25464) -OffRamp_trialExecute:test_trialExecute() (gas: 271859) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127545) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138855) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289500) +OffRamp_trialExecute:test_trialExecute() (gas: 272039) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127605) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138915) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289680) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251893) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67101) From 2dcdc7417c448ee0ccec18e855ce0008f5da87af Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:29:41 +0000 Subject: [PATCH 04/15] Update gethwrappers --- core/gethwrappers/ccip/generated/offramp/offramp.go | 4 ++-- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 830dcaf7bf4..ccafb721166 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -156,8 +156,8 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d0638038062006d06833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615f8b62000d7b600039600081816101b001528181610ce801528181612ed1015261380b0152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615f8b6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613eaf565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd919061401d565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614077565b61035361034e366004614118565b6107c6565b6040516102bd9190614175565b61014461036e3660046146de565b61081b565b61014461038136600461496d565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a01565b610e0d565b61014461012c366004614a66565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614ab1565b610e1e565b6040516102bd9190614b11565b6104dd6104b5366004614b86565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c02565b610f7c565b61051161050c366004614cb4565b61147f565b6040516102bd9190614ccf565b61014461052c366004614ce2565b61158b565b61014461053f366004614cff565b61159c565b610144610552366004614dba565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613ccf565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613ccf565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614ef7565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614ef7565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f0d565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614ef7565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f5d565b60026107e1608085614f86565b6001600160401b03166107f49190614fac565b6107fe8585611913565b901c1660038111156108125761081261414b565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614ef7565b6020026020010151905060008160200151519050600085848151811061088d5761088d614ef7565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614ef7565b60200260200101516000015190506000856020015183815181106108fd576108fd614ef7565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614ef7565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614ef7565b60200260200101516020015182815181106109f6576109f6614ef7565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614ef7565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb908590600401615070565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d919061401d565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f00000000000000000000000000000000000000000000000000000000000000009291600401615083565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150bf565b509150915081610d7d57806040516302a35ba360e21b815260040161094d919061401d565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a8789018961536c565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e926110039230929190600401615594565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156a7565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614ef7565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156ba565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156d7565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157ca565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c9060016157ef565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615816565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f0d565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab8284018461583b565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614ef7565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614ef7565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f0d565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156d7565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158bf565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e6919061597e565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159cc565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614ef7565b602002602001015184611a7557858381518110611a6857611a68614ef7565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613ccf565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614ef7565b9050602002016020810190611b2091906159f2565b63ffffffff1615611b8357848482818110611b3d57611b3d614ef7565b9050602002016020810190611b5291906159f2565b8b8281518110611b6457611b64614ef7565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614ef7565b60200260200101518b8b8b8b8b87818110611bb557611bb5614ef7565b9050602002810190611bc79190615a0d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614ef7565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a53565b9050826060015115611e48578451611e19906020614fac565b8651611e26906020614fac565b611e319060a0615a53565b611e3b9190615a53565b611e459082615a53565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef661414b565b6002811115611f0757611f0761414b565b9052509050600281602001516002811115611f2457611f2461414b565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614ef7565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a66565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615a7f565b60405190819003812061201e918b90602001615a8f565b6040516020818303038152906040528051906020012090506120438a828888886130cb565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615aa3565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615aa3565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615aa3565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b505050505061327e565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a57505050505061327e565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615aa3565b604086015161232c906003615abd565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615aa3565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615aa3565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c55565b506123b0858260016132e7565b505b6123be848260026132e7565b80516123d39060038501906020840190613c55565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615ad9565b60405180910390a1610d8384613442565b600061081283836134c5565b600082600001828154811061246057612460614ef7565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156ba565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613ccf565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156d7565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614ef7565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc8184613514565b8483815181106127de576127de614ef7565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a6080015161361c565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614ef7565b60200260200101519050600061287e898360000151606001516107c6565b905060008160038111156128945761289461414b565b14806128b1575060038160038111156128af576128af61414b565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614ef7565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f5d565b119050808061296f5750600383600381111561296d5761296d61414b565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614ef7565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614ef7565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa61414b565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a61414b565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615b8b565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156ba565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614ef7565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b8560000151606001516001613659565b600080612bac8684866136fe565b91509150612bc38d87600001516060015184613659565b8b15612c1a576003826003811115612bdd57612bdd61414b565b03612c1a576000856003811115612bf657612bf661414b565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bb7565b6002826003811115612c2e57612c2e61414b565b14612c6f576003826003811115612c4757612c4761414b565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615bd0565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614ef7565b602002602001015186865a612cdc908f614f5d565b604051612cec9493929190615bf5565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c2c565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137b2565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c49565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138b5565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d15565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d37565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f5d565b6137b2565b50905086811080612faf575081612fac8883614f5d565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156130b4575060208210155b80156130c05750600081115b979650505050505050565b8251600090815b81811015612d045760006001888684602081106130f1576130f1614ef7565b6130fe91901a601b615a66565b89858151811061311057613110614ef7565b602002602001015189868151811061312a5761312a614ef7565b602002602001015160405160008152602001604052604051613168949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561318a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156131eb576131eb61414b565b60028111156131fc576131fc61414b565b90525090506001816020015160028111156132195761321961414b565b1461323757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561326157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130d2565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132b3576132b3614ef7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613281565b60005b82518110156115ff57600083828151811061330757613307614ef7565b60200260200101519050600060028111156133245761332461414b565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133635761336361414b565b14613384576004604051631b3fab5160e11b815260040161094d9190615aa3565b6001600160a01b0381166133ab5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133d1576133d161414b565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561342e5761342e61414b565b0217905550905050508060010190506132ea565b60ff8181166000818152600260205260409020600101546201000090049091169061349a5780613485576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461350c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561357895919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135bb9190615df1565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061362a85858561398f565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613668608085614f86565b6001600160401b031661367b9190614fac565b905060006136898585611913565b90508161369860016004614f5d565b901b1916818360038111156136af576136af61414b565b6001600160401b03871660009081526009602052604081209190921b929092179182916136dd6080886159cc565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061372b90889088908890600401615e88565b600060405180830381600087803b15801561374557600080fd5b505af1925050508015613756575060015b613795573d808015613784576040519150601f19603f3d011682016040523d82523d6000602084013e613789565b606091505b506003925090506137aa565b50506040805160208101909152600081526002905b935093915050565b6000806000806000613831886040516024016137dd91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138b5565b92509250925082613859578682604051634ff17cad60e11b815260040161094d929190615d15565b6020825114613888578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b8180602001905181019061389c9190615d37565b6138a68288614f5d565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138d7576138d7613ccf565b6040519080825280601f01601f191660200182016040528015613901576020820181803683370190505b509150863b61391b5763030ed58f60e21b60005260046000fd5b5a8581101561393557632be8ca8b60e21b60005260046000fd5b8590036040810481038710613955576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139785750835b808352806000602085013e50955095509592505050565b82518251600091908183036139b757604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139cb57506101018111155b6139e8576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a12576040516309bde33960e01b815260040160405180910390fd5b80600003613a3f5786600081518110613a2d57613a2d614ef7565b60200260200101519350505050613c0d565b6000816001600160401b03811115613a5957613a59613ccf565b604051908082528060200260200182016040528015613a82578160200160208202803683370190505b50905060008080805b85811015613bac5760006001821b8b811603613ae65788851015613acf578c5160018601958e918110613ac057613ac0614ef7565b60200260200101519050613b08565b8551600185019487918110613ac057613ac0614ef7565b8b5160018401938d918110613afd57613afd614ef7565b602002602001015190505b600089861015613b38578d5160018701968f918110613b2957613b29614ef7565b60200260200101519050613b5a565b8651600186019588918110613b4f57613b4f614ef7565b602002602001015190505b82851115613b7b576040516309bde33960e01b815260040160405180910390fd5b613b858282613c14565b878481518110613b9757613b97614ef7565b60209081029190910101525050600101613a8b565b506001850382148015613bbe57508683145b8015613bc957508581145b613be6576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bfb57613bfb614ef7565b60200260200101519750505050505050505b9392505050565b6000818310613c2c57613c278284613c32565b610812565b61081283835b6040805160016020820152908101839052606081018290526000906080016135fe565b828054828255906000526020600020908101928215613caa579160200282015b82811115613caa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c75565b50613cb6929150613cba565b5090565b5b80821115613cb65760008155600101613cbb565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d0757613d07613ccf565b60405290565b60405160a081016001600160401b0381118282101715613d0757613d07613ccf565b60405160c081016001600160401b0381118282101715613d0757613d07613ccf565b604080519081016001600160401b0381118282101715613d0757613d07613ccf565b604051606081016001600160401b0381118282101715613d0757613d07613ccf565b604051601f8201601f191681016001600160401b0381118282101715613dbd57613dbd613ccf565b604052919050565b60006001600160401b03821115613dde57613dde613ccf565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e1457600080fd5b919050565b801515811461056857600080fd5b8035613e1481613e19565b60006001600160401b03821115613e4b57613e4b613ccf565b50601f01601f191660200190565b600082601f830112613e6a57600080fd5b8135613e7d613e7882613e32565b613d95565b818152846020838601011115613e9257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ec257600080fd5b82356001600160401b0380821115613ed957600080fd5b818501915085601f830112613eed57600080fd5b8135613efb613e7882613dc5565b81815260059190911b83018401908481019088831115613f1a57600080fd5b8585015b83811015613fc057803585811115613f365760008081fd5b86016080818c03601f1901811315613f4e5760008081fd5b613f56613ce5565b89830135613f6381613de8565b81526040613f72848201613dfd565b8b830152606080850135613f8581613e19565b83830152928401359289841115613f9e57600091508182fd5b613fac8f8d86880101613e59565b908301525085525050918601918601613f1e565b5098975050505050505050565b60005b83811015613fe8578181015183820152602001613fd0565b50506000910152565b60008151808452614009816020860160208601613fcd565b601f01601f19169290920160200192915050565b6020815260006108126020830184613ff1565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136516080850182613ff1565b604080825283519082018190526000906020906060840190828701845b828110156140b95781516001600160401b031684529284019290840190600101614094565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561410957601f198684030185526140f7838351614030565b948701949250908601906001016140db565b50909998505050505050505050565b6000806040838503121561412b57600080fd5b61413483613dfd565b915061414260208401613dfd565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141715761417161414b565b9052565b602081016108158284614161565b600060a0828403121561419557600080fd5b61419d613d0d565b9050813581526141af60208301613dfd565b60208201526141c060408301613dfd565b60408201526141d160608301613dfd565b60608201526141e260808301613dfd565b608082015292915050565b8035613e1481613de8565b803563ffffffff81168114613e1457600080fd5b600082601f83011261421d57600080fd5b8135602061422d613e7883613dc5565b82815260059290921b8401810191818101908684111561424c57600080fd5b8286015b8481101561431c5780356001600160401b03808211156142705760008081fd5b9088019060a0828b03601f190181131561428a5760008081fd5b614292613d0d565b87840135838111156142a45760008081fd5b6142b28d8a83880101613e59565b8252506040808501356142c481613de8565b828a015260606142d58682016141f8565b828401526080915081860135858111156142ef5760008081fd5b6142fd8f8c838a0101613e59565b9184019190915250919093013590830152508352918301918301614250565b509695505050505050565b6000610140828403121561433a57600080fd5b614342613d2f565b905061434e8383614183565b815260a08201356001600160401b038082111561436a57600080fd5b61437685838601613e59565b602084015260c084013591508082111561438f57600080fd5b61439b85838601613e59565b60408401526143ac60e085016141ed565b606084015261010084013560808401526101208401359150808211156143d157600080fd5b506143de8482850161420c565b60a08301525092915050565b600082601f8301126143fb57600080fd5b8135602061440b613e7883613dc5565b82815260059290921b8401810191818101908684111561442a57600080fd5b8286015b8481101561431c5780356001600160401b0381111561444d5760008081fd5b61445b8986838b0101614327565b84525091830191830161442e565b600082601f83011261447a57600080fd5b8135602061448a613e7883613dc5565b82815260059290921b840181019181810190868411156144a957600080fd5b8286015b8481101561431c5780356001600160401b03808211156144cc57600080fd5b818901915089603f8301126144e057600080fd5b858201356144f0613e7882613dc5565b81815260059190911b830160400190878101908c83111561451057600080fd5b604085015b838110156145495780358581111561452c57600080fd5b61453b8f6040838a0101613e59565b845250918901918901614515565b508752505050928401925083016144ad565b600082601f83011261456c57600080fd5b8135602061457c613e7883613dc5565b8083825260208201915060208460051b87010193508684111561459e57600080fd5b602086015b8481101561431c57803583529183019183016145a3565b600082601f8301126145cb57600080fd5b813560206145db613e7883613dc5565b82815260059290921b840181019181810190868411156145fa57600080fd5b8286015b8481101561431c5780356001600160401b038082111561461e5760008081fd5b9088019060a0828b03601f19018113156146385760008081fd5b614640613d0d565b61464b888501613dfd565b8152604080850135848111156146615760008081fd5b61466f8e8b838901016143ea565b8a84015250606080860135858111156146885760008081fd5b6146968f8c838a0101614469565b83850152506080915081860135858111156146b15760008081fd5b6146bf8f8c838a010161455b565b91840191909152509190930135908301525083529183019183016145fe565b600080604083850312156146f157600080fd5b6001600160401b038335111561470657600080fd5b61471384843585016145ba565b91506001600160401b036020840135111561472d57600080fd5b6020830135830184601f82011261474357600080fd5b614750613e788235613dc5565b81358082526020808301929160051b84010187101561476e57600080fd5b602083015b6020843560051b850101811015614914576001600160401b038135111561479957600080fd5b87603f8235860101126147ab57600080fd5b6147be613e786020833587010135613dc5565b81358501602081810135808452908301929160059190911b016040018a10156147e657600080fd5b604083358701015b83358701602081013560051b01604001811015614904576001600160401b038135111561481a57600080fd5b833587018135016040818d03603f1901121561483557600080fd5b61483d613d51565b604082013581526001600160401b036060830135111561485c57600080fd5b8c605f60608401358401011261487157600080fd5b6040606083013583010135614888613e7882613dc5565b808282526020820191508f60608460051b60608801358801010111156148ad57600080fd5b6060808601358601015b60608460051b6060880135880101018110156148e4576148d6816141f8565b8352602092830192016148b7565b5080602085015250505080855250506020830192506020810190506147ee565b5084525060209283019201614773565b508093505050509250929050565b60008083601f84011261493457600080fd5b5081356001600160401b0381111561494b57600080fd5b6020830191508360208260051b850101111561496657600080fd5b9250929050565b60008060008060006060868803121561498557600080fd5b85356001600160401b038082111561499c57600080fd5b6149a889838a01614327565b965060208801359150808211156149be57600080fd5b6149ca89838a01614922565b909650945060408801359150808211156149e357600080fd5b506149f088828901614922565b969995985093965092949392505050565b600060808284031215614a1357600080fd5b614a1b613ce5565b8235614a2681613de8565b8152614a34602084016141f8565b60208201526040830135614a4781613e19565b60408201526060830135614a5a81613de8565b60608201529392505050565b600060208284031215614a7857600080fd5b81356001600160401b03811115614a8e57600080fd5b820160a08185031215613c0d57600080fd5b803560ff81168114613e1457600080fd5b600060208284031215614ac357600080fd5b61081282614aa0565b60008151808452602080850194506020840160005b83811015614b065781516001600160a01b031687529582019590820190600101614ae1565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b6060e0840182614acc565b90506040840151601f198483030160c0850152614b7d8282614acc565b95945050505050565b60008060408385031215614b9957600080fd5b614ba283613dfd565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bd357600080fd5b5081356001600160401b03811115614bea57600080fd5b60208301915083602082850101111561496657600080fd5b60008060008060008060008060c0898b031215614c1e57600080fd5b614c288a8a614bb0565b975060408901356001600160401b0380821115614c4457600080fd5b614c508c838d01614bc1565b909950975060608b0135915080821115614c6957600080fd5b614c758c838d01614922565b909750955060808b0135915080821115614c8e57600080fd5b50614c9b8b828c01614922565b999c989b50969995989497949560a00135949350505050565b600060208284031215614cc657600080fd5b61081282613dfd565b6020815260006108126020830184614030565b600060208284031215614cf457600080fd5b8135613c0d81613de8565b600080600060608486031215614d1457600080fd5b614d1e8585614bb0565b925060408401356001600160401b03811115614d3957600080fd5b614d4586828701614bc1565b9497909650939450505050565b600082601f830112614d6357600080fd5b81356020614d73613e7883613dc5565b8083825260208201915060208460051b870101935086841115614d9557600080fd5b602086015b8481101561431c578035614dad81613de8565b8352918301918301614d9a565b60006020808385031215614dcd57600080fd5b82356001600160401b0380821115614de457600080fd5b818501915085601f830112614df857600080fd5b8135614e06613e7882613dc5565b81815260059190911b83018401908481019088831115614e2557600080fd5b8585015b83811015613fc057803585811115614e4057600080fd5b860160c0818c03601f19011215614e575760008081fd5b614e5f613d2f565b8882013581526040614e72818401614aa0565b8a8301526060614e83818501614aa0565b8284015260809150614e96828501613e27565b9083015260a08381013589811115614eae5760008081fd5b614ebc8f8d83880101614d52565b838501525060c0840135915088821115614ed65760008081fd5b614ee48e8c84870101614d52565b9083015250845250918601918601614e29565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f2157607f821691505b602082108103614f4157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f47565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fa057614fa0614f70565b92169190910692915050565b808202811582820484141761081557610815614f47565b80518252600060206001600160401b0381840151168185015260408084015160a06040870152614ff660a0870182613ff1565b90506060850151868203606088015261500f8282613ff1565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561506457835180516001600160a01b0316835286015186830152928501926001929092019190840190615032565b50979650505050505050565b6020815260006108126020830184614fc3565b6080815260006150966080830187614fc3565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150d457600080fd5b83516150df81613e19565b60208501519093506001600160401b038111156150fb57600080fd5b8401601f8101861361510c57600080fd5b805161511a613e7882613e32565b81815287602083850101111561512f57600080fd5b615140826020830160208601613fcd565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e1457600080fd5b600082601f83011261517c57600080fd5b8135602061518c613e7883613dc5565b82815260069290921b840181019181810190868411156151ab57600080fd5b8286015b8481101561431c57604081890312156151c85760008081fd5b6151d0613d51565b6151d982613dfd565b81526151e6858301615154565b818601528352918301916040016151af565b600082601f83011261520957600080fd5b81356020615219613e7883613dc5565b82815260059290921b8401810191818101908684111561523857600080fd5b8286015b8481101561431c5780356001600160401b038082111561525c5760008081fd5b9088019060a0828b03601f19018113156152765760008081fd5b61527e613d0d565b615289888501613dfd565b81526040808501358481111561529f5760008081fd5b6152ad8e8b83890101613e59565b8a84015250606093506152c1848601613dfd565b9082015260806152d2858201613dfd565b9382019390935292013590820152835291830191830161523c565b600082601f8301126152fe57600080fd5b8135602061530e613e7883613dc5565b82815260069290921b8401810191818101908684111561532d57600080fd5b8286015b8481101561431c576040818903121561534a5760008081fd5b615352613d51565b813581528482013585820152835291830191604001615331565b6000602080838503121561537f57600080fd5b82356001600160401b038082111561539657600080fd5b90840190606082870312156153aa57600080fd5b6153b2613d73565b8235828111156153c157600080fd5b830160408189038113156153d457600080fd5b6153dc613d51565b8235858111156153eb57600080fd5b8301601f81018b136153fc57600080fd5b803561540a613e7882613dc5565b81815260069190911b8201890190898101908d83111561542957600080fd5b928a01925b828410156154795785848f0312156154465760008081fd5b61544e613d51565b843561545981613de8565b8152615466858d01615154565b818d0152825292850192908a019061542e565b84525050508287013591508482111561549157600080fd5b61549d8a83850161516b565b818801528352505082840135828111156154b657600080fd5b6154c2888286016151f8565b858301525060408301359350818411156154db57600080fd5b6154e7878585016152ed565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561558757601f19868403018952815160a06001600160401b0380835116865286830151828888015261554b83880182613ff1565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615513565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155b760608401866154f6565b83810360408581019190915285518083528387019284019060005b81811015614109578451805184528601518684015293850193918301916001016155d2565b805160408084528151848201819052600092602091908201906060870190855b8181101561564e57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615617565b50508583015187820388850152805180835290840192506000918401905b8083101561506457835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061566c565b60208152600061081260208301846155f7565b6000602082840312156156cc57600080fd5b8151613c0d81613e19565b60008083546156e581614f0d565b600182811680156156fd576001811461571257615741565b60ff1984168752821515830287019450615741565b8760005260208060002060005b858110156157385781548a82015290840190820161571f565b50505082870194505b50929695505050505050565b6000815461575a81614f0d565b8085526020600183811680156157775760018114615791576157bf565b60ff1985168884015283151560051b8801830195506157bf565b866000528260002060005b858110156157b75781548a820186015290830190840161579c565b890184019650505b505050505092915050565b6040815260006157dd6040830185613ff1565b8281036020840152614b7d818561574d565b6001600160401b0381811683821601908082111561580f5761580f614f47565b5092915050565b60408152600061582960408301856154f6565b8281036020840152614b7d81856155f7565b60006020828403121561584d57600080fd5b81356001600160401b0381111561586357600080fd5b613651848285016145ba565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158985750805b601f850160051c820191505b818110156158b7578281556001016158a4565b505050505050565b81516001600160401b038111156158d8576158d8613ccf565b6158ec816158e68454614f0d565b8461586f565b602080601f83116001811461592157600084156159095750858301515b600019600386901b1c1916600185901b1785556158b7565b600085815260208120601f198616915b8281101561595057888601518255948401946001909101908401615931565b508582101561596e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a083016001850161574d565b60006001600160401b03808416806159e6576159e6614f70565b92169190910492915050565b600060208284031215615a0457600080fd5b610812826141f8565b6000808335601e19843603018112615a2457600080fd5b8301803591506001600160401b03821115615a3e57600080fd5b60200191503681900382131561496657600080fd5b8082018082111561081557610815614f47565b60ff818116838216019081111561081557610815614f47565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ab757615ab761414b565b91905290565b60ff818116838216029081169081811461580f5761580f614f47565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b315784546001600160a01b031683526001948501949284019201615b0c565b50508481036060860152865180825290820192508187019060005b81811015615b715782516001600160a01b031685529383019391830191600101615b4c565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b7d6060830184613ff1565b8281526040602082015260006136516040830184613ff1565b6001600160401b03848116825283166020820152606081016136516040830184614161565b848152615c056020820185614161565b608060408201526000615c1b6080830185613ff1565b905082606083015295945050505050565b600060208284031215615c3e57600080fd5b8151613c0d81613de8565b6020815260008251610100806020850152615c68610120850183613ff1565b91506020850151615c8460408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cbe60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cdb8483613ff1565b935060c08701519150808685030160e0870152615cf88483613ff1565b935060e0870151915080868503018387015250615b818382613ff1565b6001600160a01b03831681526040602082015260006136516040830184613ff1565b600060208284031215615d4957600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561558757601f19868403018952815160a08151818652615d9382870182613ff1565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615dcf8382613ff1565b6080948501519790940196909652505098840198925090830190600101615d6d565b6020815260006108126020830184615d50565b60008282518085526020808601955060208260051b8401016020860160005b8481101561558757601f19868403018952615e3f838351613ff1565b98840198925090830190600101615e23565b60008151808452602080850194506020840160005b83811015614b0657815163ffffffff1687529582019590820190600101615e66565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615ef06101a0850183613ff1565b91506040870151605f198086850301610120870152615f0f8483613ff1565b935060608901519150615f2c838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f558282615d50565b9150508281036020840152615f6a8186615e04565b90508281036040840152615b818185615e5156fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughGasForSupportsInterfaceCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d2738038062006d27833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fac62000d7b600039600081816101b001528181610ce801528181612ed1015261382c0152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fac6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613ed0565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd919061403e565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614098565b61035361034e366004614139565b6107c6565b6040516102bd9190614196565b61014461036e3660046146ff565b61081b565b61014461038136600461498e565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a22565b610e0d565b61014461012c366004614a87565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614ad2565b610e1e565b6040516102bd9190614b32565b6104dd6104b5366004614ba7565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c23565b610f7c565b61051161050c366004614cd5565b61147f565b6040516102bd9190614cf0565b61014461052c366004614d03565b61158b565b61014461053f366004614d20565b61159c565b610144610552366004614ddb565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613cf0565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613cf0565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f18565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f18565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f2e565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f18565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f7e565b60026107e1608085614fa7565b6001600160401b03166107f49190614fcd565b6107fe8585611913565b901c1660038111156108125761081261416c565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f18565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f18565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f18565b60200260200101516000015190506000856020015183815181106108fd576108fd614f18565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f18565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f18565b60200260200101516020015182815181106109f6576109f6614f18565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f18565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb908590600401615091565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d919061403e565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f000000000000000000000000000000000000000000000000000000000000000092916004016150a4565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150e0565b509150915081610d7d57806040516302a35ba360e21b815260040161094d919061403e565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a8789018961538d565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155b5565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c8565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f18565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156db565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f8565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157eb565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c906001615810565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615837565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f2e565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab8284018461585c565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f18565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f18565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f2e565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f8565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158e0565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e6919061599f565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159ed565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f18565b602002602001015184611a7557858381518110611a6857611a68614f18565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613cf0565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f18565b9050602002016020810190611b209190615a13565b63ffffffff1615611b8357848482818110611b3d57611b3d614f18565b9050602002016020810190611b529190615a13565b8b8281518110611b6457611b64614f18565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f18565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f18565b9050602002810190611bc79190615a2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f18565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a74565b9050826060015115611e48578451611e19906020614fcd565b8651611e26906020614fcd565b611e319060a0615a74565b611e3b9190615a74565b611e459082615a74565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef661416c565b6002811115611f0757611f0761416c565b9052509050600281602001516002811115611f2457611f2461416c565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f18565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a87565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615aa0565b60405190819003812061201e918b90602001615ab0565b6040516020818303038152906040528051906020012090506120438a828888886130ec565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615ac4565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615ac4565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615ac4565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b505050505061329f565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a57505050505061329f565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615ac4565b604086015161232c906003615ade565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615ac4565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615ac4565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c76565b506123b085826001613308565b505b6123be84826002613308565b80516123d39060038501906020840190613c76565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615afa565b60405180910390a1610d8384613463565b600061081283836134e6565b600082600001828154811061246057612460614f18565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156db565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613cf0565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f8565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f18565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc8184613535565b8483815181106127de576127de614f18565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a6080015161363d565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f18565b60200260200101519050600061287e898360000151606001516107c6565b905060008160038111156128945761289461416c565b14806128b1575060038160038111156128af576128af61416c565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f18565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f7e565b119050808061296f5750600383600381111561296d5761296d61416c565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f18565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f18565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa61416c565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a61416c565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615bac565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156db565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f18565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b856000015160600151600161367a565b600080612bac86848661371f565b91509150612bc38d8760000151606001518461367a565b8b15612c1a576003826003811115612bdd57612bdd61416c565b03612c1a576000856003811115612bf657612bf661416c565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd8565b6002826003811115612c2e57612c2e61416c565b14612c6f576003826003811115612c4757612c4761416c565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615bf1565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f18565b602002602001015186865a612cdc908f614f7e565b604051612cec9493929190615c16565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c4d565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137d3565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c6a565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138d6565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d36565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d58565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f7e565b6137d3565b50905086811080612faf575081612fac8883614f7e565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b1790526000908180806175305a10156130ae5760405163161c3bf760e01b815260040160405180910390fd5b602060008551602087018a617530fa92503d915060005190508280156130d5575060208210155b80156130e15750600081115b979650505050505050565b8251600090815b81811015612d0457600060018886846020811061311257613112614f18565b61311f91901a601b615a87565b89858151811061313157613131614f18565b602002602001015189868151811061314b5761314b614f18565b602002602001015160405160008152602001604052604051613189949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131ab573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320c5761320c61416c565b600281111561321d5761321d61416c565b905250905060018160200151600281111561323a5761323a61416c565b1461325857604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561328257604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130f3565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132d4576132d4614f18565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff191690556001016132a2565b60005b82518110156115ff57600083828151811061332857613328614f18565b60200260200101519050600060028111156133455761334561416c565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133845761338461416c565b146133a5576004604051631b3fab5160e11b815260040161094d9190615ac4565b6001600160a01b0381166133cc5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133f2576133f261416c565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344f5761344f61416c565b02179055509050505080600101905061330b565b60ff818116600081815260026020526040902060010154620100009004909116906134bb57806134a6576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359995919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135dc9190615e12565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061364b8585856139b0565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613689608085614fa7565b6001600160401b031661369c9190614fcd565b905060006136aa8585611913565b9050816136b960016004614f7e565b901b1916818360038111156136d0576136d061416c565b6001600160401b03871660009081526009602052604081209190921b929092179182916136fe6080886159ed565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374c90889088908890600401615ea9565b600060405180830381600087803b15801561376657600080fd5b505af1925050508015613777575060015b6137b6573d8080156137a5576040519150601f19603f3d011682016040523d82523d6000602084013e6137aa565b606091505b506003925090506137cb565b50506040805160208101909152600081526002905b935093915050565b6000806000806000613852886040516024016137fe91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138d6565b9250925092508261387a578682604051634ff17cad60e11b815260040161094d929190615d36565b60208251146138a9578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138bd9190615d58565b6138c78288614f7e565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f8576138f8613cf0565b6040519080825280601f01601f191660200182016040528015613922576020820181803683370190505b509150863b61393c5763030ed58f60e21b60005260046000fd5b5a8581101561395657632be8ca8b60e21b60005260046000fd5b8590036040810481038710613976576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139995750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d857604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139ec57506101018111155b613a09576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a33576040516309bde33960e01b815260040160405180910390fd5b80600003613a605786600081518110613a4e57613a4e614f18565b60200260200101519350505050613c2e565b6000816001600160401b03811115613a7a57613a7a613cf0565b604051908082528060200260200182016040528015613aa3578160200160208202803683370190505b50905060008080805b85811015613bcd5760006001821b8b811603613b075788851015613af0578c5160018601958e918110613ae157613ae1614f18565b60200260200101519050613b29565b8551600185019487918110613ae157613ae1614f18565b8b5160018401938d918110613b1e57613b1e614f18565b602002602001015190505b600089861015613b59578d5160018701968f918110613b4a57613b4a614f18565b60200260200101519050613b7b565b8651600186019588918110613b7057613b70614f18565b602002602001015190505b82851115613b9c576040516309bde33960e01b815260040160405180910390fd5b613ba68282613c35565b878481518110613bb857613bb8614f18565b60209081029190910101525050600101613aac565b506001850382148015613bdf57508683145b8015613bea57508581145b613c07576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1c57613c1c614f18565b60200260200101519750505050505050505b9392505050565b6000818310613c4d57613c488284613c53565b610812565b61081283835b60408051600160208201529081018390526060810182905260009060800161361f565b828054828255906000526020600020908101928215613ccb579160200282015b82811115613ccb57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c96565b50613cd7929150613cdb565b5090565b5b80821115613cd75760008155600101613cdc565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2857613d28613cf0565b60405290565b60405160a081016001600160401b0381118282101715613d2857613d28613cf0565b60405160c081016001600160401b0381118282101715613d2857613d28613cf0565b604080519081016001600160401b0381118282101715613d2857613d28613cf0565b604051606081016001600160401b0381118282101715613d2857613d28613cf0565b604051601f8201601f191681016001600160401b0381118282101715613dde57613dde613cf0565b604052919050565b60006001600160401b03821115613dff57613dff613cf0565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e3557600080fd5b919050565b801515811461056857600080fd5b8035613e3581613e3a565b60006001600160401b03821115613e6c57613e6c613cf0565b50601f01601f191660200190565b600082601f830112613e8b57600080fd5b8135613e9e613e9982613e53565b613db6565b818152846020838601011115613eb357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ee357600080fd5b82356001600160401b0380821115613efa57600080fd5b818501915085601f830112613f0e57600080fd5b8135613f1c613e9982613de6565b81815260059190911b83018401908481019088831115613f3b57600080fd5b8585015b83811015613fe157803585811115613f575760008081fd5b86016080818c03601f1901811315613f6f5760008081fd5b613f77613d06565b89830135613f8481613e09565b81526040613f93848201613e1e565b8b830152606080850135613fa681613e3a565b83830152928401359289841115613fbf57600091508182fd5b613fcd8f8d86880101613e7a565b908301525085525050918601918601613f3f565b5098975050505050505050565b60005b83811015614009578181015183820152602001613ff1565b50506000910152565b6000815180845261402a816020860160208601613fee565b601f01601f19169290920160200192915050565b6020815260006108126020830184614012565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136726080850182614012565b604080825283519082018190526000906020906060840190828701845b828110156140da5781516001600160401b0316845292840192908401906001016140b5565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412a57601f19868403018552614118838351614051565b948701949250908601906001016140fc565b50909998505050505050505050565b6000806040838503121561414c57600080fd5b61415583613e1e565b915061416360208401613e1e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141925761419261416c565b9052565b602081016108158284614182565b600060a082840312156141b657600080fd5b6141be613d2e565b9050813581526141d060208301613e1e565b60208201526141e160408301613e1e565b60408201526141f260608301613e1e565b606082015261420360808301613e1e565b608082015292915050565b8035613e3581613e09565b803563ffffffff81168114613e3557600080fd5b600082601f83011261423e57600080fd5b8135602061424e613e9983613de6565b82815260059290921b8401810191818101908684111561426d57600080fd5b8286015b8481101561433d5780356001600160401b03808211156142915760008081fd5b9088019060a0828b03601f19018113156142ab5760008081fd5b6142b3613d2e565b87840135838111156142c55760008081fd5b6142d38d8a83880101613e7a565b8252506040808501356142e581613e09565b828a015260606142f6868201614219565b828401526080915081860135858111156143105760008081fd5b61431e8f8c838a0101613e7a565b9184019190915250919093013590830152508352918301918301614271565b509695505050505050565b6000610140828403121561435b57600080fd5b614363613d50565b905061436f83836141a4565b815260a08201356001600160401b038082111561438b57600080fd5b61439785838601613e7a565b602084015260c08401359150808211156143b057600080fd5b6143bc85838601613e7a565b60408401526143cd60e0850161420e565b606084015261010084013560808401526101208401359150808211156143f257600080fd5b506143ff8482850161422d565b60a08301525092915050565b600082601f83011261441c57600080fd5b8135602061442c613e9983613de6565b82815260059290921b8401810191818101908684111561444b57600080fd5b8286015b8481101561433d5780356001600160401b0381111561446e5760008081fd5b61447c8986838b0101614348565b84525091830191830161444f565b600082601f83011261449b57600080fd5b813560206144ab613e9983613de6565b82815260059290921b840181019181810190868411156144ca57600080fd5b8286015b8481101561433d5780356001600160401b03808211156144ed57600080fd5b818901915089603f83011261450157600080fd5b85820135614511613e9982613de6565b81815260059190911b830160400190878101908c83111561453157600080fd5b604085015b8381101561456a5780358581111561454d57600080fd5b61455c8f6040838a0101613e7a565b845250918901918901614536565b508752505050928401925083016144ce565b600082601f83011261458d57600080fd5b8135602061459d613e9983613de6565b8083825260208201915060208460051b8701019350868411156145bf57600080fd5b602086015b8481101561433d57803583529183019183016145c4565b600082601f8301126145ec57600080fd5b813560206145fc613e9983613de6565b82815260059290921b8401810191818101908684111561461b57600080fd5b8286015b8481101561433d5780356001600160401b038082111561463f5760008081fd5b9088019060a0828b03601f19018113156146595760008081fd5b614661613d2e565b61466c888501613e1e565b8152604080850135848111156146825760008081fd5b6146908e8b8389010161440b565b8a84015250606080860135858111156146a95760008081fd5b6146b78f8c838a010161448a565b83850152506080915081860135858111156146d25760008081fd5b6146e08f8c838a010161457c565b918401919091525091909301359083015250835291830191830161461f565b6000806040838503121561471257600080fd5b6001600160401b038335111561472757600080fd5b61473484843585016145db565b91506001600160401b036020840135111561474e57600080fd5b6020830135830184601f82011261476457600080fd5b614771613e998235613de6565b81358082526020808301929160051b84010187101561478f57600080fd5b602083015b6020843560051b850101811015614935576001600160401b03813511156147ba57600080fd5b87603f8235860101126147cc57600080fd5b6147df613e996020833587010135613de6565b81358501602081810135808452908301929160059190911b016040018a101561480757600080fd5b604083358701015b83358701602081013560051b01604001811015614925576001600160401b038135111561483b57600080fd5b833587018135016040818d03603f1901121561485657600080fd5b61485e613d72565b604082013581526001600160401b036060830135111561487d57600080fd5b8c605f60608401358401011261489257600080fd5b60406060830135830101356148a9613e9982613de6565b808282526020820191508f60608460051b60608801358801010111156148ce57600080fd5b6060808601358601015b60608460051b606088013588010101811015614905576148f781614219565b8352602092830192016148d8565b50806020850152505050808552505060208301925060208101905061480f565b5084525060209283019201614794565b508093505050509250929050565b60008083601f84011261495557600080fd5b5081356001600160401b0381111561496c57600080fd5b6020830191508360208260051b850101111561498757600080fd5b9250929050565b6000806000806000606086880312156149a657600080fd5b85356001600160401b03808211156149bd57600080fd5b6149c989838a01614348565b965060208801359150808211156149df57600080fd5b6149eb89838a01614943565b90965094506040880135915080821115614a0457600080fd5b50614a1188828901614943565b969995985093965092949392505050565b600060808284031215614a3457600080fd5b614a3c613d06565b8235614a4781613e09565b8152614a5560208401614219565b60208201526040830135614a6881613e3a565b60408201526060830135614a7b81613e09565b60608201529392505050565b600060208284031215614a9957600080fd5b81356001600160401b03811115614aaf57600080fd5b820160a08185031215613c2e57600080fd5b803560ff81168114613e3557600080fd5b600060208284031215614ae457600080fd5b61081282614ac1565b60008151808452602080850194506020840160005b83811015614b275781516001600160a01b031687529582019590820190600101614b02565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b8160e0840182614aed565b90506040840151601f198483030160c0850152614b9e8282614aed565b95945050505050565b60008060408385031215614bba57600080fd5b614bc383613e1e565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bf457600080fd5b5081356001600160401b03811115614c0b57600080fd5b60208301915083602082850101111561498757600080fd5b60008060008060008060008060c0898b031215614c3f57600080fd5b614c498a8a614bd1565b975060408901356001600160401b0380821115614c6557600080fd5b614c718c838d01614be2565b909950975060608b0135915080821115614c8a57600080fd5b614c968c838d01614943565b909750955060808b0135915080821115614caf57600080fd5b50614cbc8b828c01614943565b999c989b50969995989497949560a00135949350505050565b600060208284031215614ce757600080fd5b61081282613e1e565b6020815260006108126020830184614051565b600060208284031215614d1557600080fd5b8135613c2e81613e09565b600080600060608486031215614d3557600080fd5b614d3f8585614bd1565b925060408401356001600160401b03811115614d5a57600080fd5b614d6686828701614be2565b9497909650939450505050565b600082601f830112614d8457600080fd5b81356020614d94613e9983613de6565b8083825260208201915060208460051b870101935086841115614db657600080fd5b602086015b8481101561433d578035614dce81613e09565b8352918301918301614dbb565b60006020808385031215614dee57600080fd5b82356001600160401b0380821115614e0557600080fd5b818501915085601f830112614e1957600080fd5b8135614e27613e9982613de6565b81815260059190911b83018401908481019088831115614e4657600080fd5b8585015b83811015613fe157803585811115614e6157600080fd5b860160c0818c03601f19011215614e785760008081fd5b614e80613d50565b8882013581526040614e93818401614ac1565b8a8301526060614ea4818501614ac1565b8284015260809150614eb7828501613e48565b9083015260a08381013589811115614ecf5760008081fd5b614edd8f8d83880101614d73565b838501525060c0840135915088821115614ef75760008081fd5b614f058e8c84870101614d73565b9083015250845250918601918601614e4a565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f4257607f821691505b602082108103614f6257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f68565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fc157614fc1614f91565b92169190910692915050565b808202811582820484141761081557610815614f68565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261501760a0870182614012565b9050606085015186820360608801526150308282614012565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561508557835180516001600160a01b0316835286015186830152928501926001929092019190840190615053565b50979650505050505050565b6020815260006108126020830184614fe4565b6080815260006150b76080830187614fe4565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150f557600080fd5b835161510081613e3a565b60208501519093506001600160401b0381111561511c57600080fd5b8401601f8101861361512d57600080fd5b805161513b613e9982613e53565b81815287602083850101111561515057600080fd5b615161826020830160208601613fee565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e3557600080fd5b600082601f83011261519d57600080fd5b813560206151ad613e9983613de6565b82815260069290921b840181019181810190868411156151cc57600080fd5b8286015b8481101561433d57604081890312156151e95760008081fd5b6151f1613d72565b6151fa82613e1e565b8152615207858301615175565b818601528352918301916040016151d0565b600082601f83011261522a57600080fd5b8135602061523a613e9983613de6565b82815260059290921b8401810191818101908684111561525957600080fd5b8286015b8481101561433d5780356001600160401b038082111561527d5760008081fd5b9088019060a0828b03601f19018113156152975760008081fd5b61529f613d2e565b6152aa888501613e1e565b8152604080850135848111156152c05760008081fd5b6152ce8e8b83890101613e7a565b8a84015250606093506152e2848601613e1e565b9082015260806152f3858201613e1e565b9382019390935292013590820152835291830191830161525d565b600082601f83011261531f57600080fd5b8135602061532f613e9983613de6565b82815260069290921b8401810191818101908684111561534e57600080fd5b8286015b8481101561433d576040818903121561536b5760008081fd5b615373613d72565b813581528482013585820152835291830191604001615352565b600060208083850312156153a057600080fd5b82356001600160401b03808211156153b757600080fd5b90840190606082870312156153cb57600080fd5b6153d3613d94565b8235828111156153e257600080fd5b830160408189038113156153f557600080fd5b6153fd613d72565b82358581111561540c57600080fd5b8301601f81018b1361541d57600080fd5b803561542b613e9982613de6565b81815260069190911b8201890190898101908d83111561544a57600080fd5b928a01925b8284101561549a5785848f0312156154675760008081fd5b61546f613d72565b843561547a81613e09565b8152615487858d01615175565b818d0152825292850192908a019061544f565b8452505050828701359150848211156154b257600080fd5b6154be8a83850161518c565b818801528352505082840135828111156154d757600080fd5b6154e388828601615219565b858301525060408301359350818411156154fc57600080fd5b6155088785850161530e565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a857601f19868403018952815160a06001600160401b0380835116865286830151828888015261556c83880182614012565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615534565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d86060840186615517565b83810360408581019190915285518083528387019284019060005b8181101561412a578451805184528601518684015293850193918301916001016155f3565b805160408084528151848201819052600092602091908201906060870190855b8181101561566f57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615638565b50508583015187820388850152805180835290840192506000918401905b8083101561508557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061568d565b6020815260006108126020830184615618565b6000602082840312156156ed57600080fd5b8151613c2e81613e3a565b600080835461570681614f2e565b6001828116801561571e576001811461573357615762565b60ff1984168752821515830287019450615762565b8760005260208060002060005b858110156157595781548a820152908401908201615740565b50505082870194505b50929695505050505050565b6000815461577b81614f2e565b80855260206001838116801561579857600181146157b2576157e0565b60ff1985168884015283151560051b8801830195506157e0565b866000528260002060005b858110156157d85781548a82018601529083019084016157bd565b890184019650505b505050505092915050565b6040815260006157fe6040830185614012565b8281036020840152614b9e818561576e565b6001600160401b0381811683821601908082111561583057615830614f68565b5092915050565b60408152600061584a6040830185615517565b8281036020840152614b9e8185615618565b60006020828403121561586e57600080fd5b81356001600160401b0381111561588457600080fd5b613672848285016145db565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b95750805b601f850160051c820191505b818110156158d8578281556001016158c5565b505050505050565b81516001600160401b038111156158f9576158f9613cf0565b61590d816159078454614f2e565b84615890565b602080601f831160018114615942576000841561592a5750858301515b600019600386901b1c1916600185901b1785556158d8565b600085815260208120601f198616915b8281101561597157888601518255948401946001909101908401615952565b508582101561598f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a083016001850161576e565b60006001600160401b0380841680615a0757615a07614f91565b92169190910492915050565b600060208284031215615a2557600080fd5b61081282614219565b6000808335601e19843603018112615a4557600080fd5b8301803591506001600160401b03821115615a5f57600080fd5b60200191503681900382131561498757600080fd5b8082018082111561081557610815614f68565b60ff818116838216019081111561081557610815614f68565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad857615ad861416c565b91905290565b60ff818116838216029081169081811461583057615830614f68565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b525784546001600160a01b031683526001948501949284019201615b2d565b50508481036060860152865180825290820192508187019060005b81811015615b925782516001600160a01b031685529383019391830191600101615b6d565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b9e6060830184614012565b8281526040602082015260006136726040830184614012565b6001600160401b03848116825283166020820152606081016136726040830184614182565b848152615c266020820185614182565b608060408201526000615c3c6080830185614012565b905082606083015295945050505050565b600060208284031215615c5f57600080fd5b8151613c2e81613e09565b6020815260008251610100806020850152615c89610120850183614012565b91506020850151615ca560408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cdf60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cfc8483614012565b935060c08701519150808685030160e0870152615d198483614012565b935060e0870151915080868503018387015250615ba28382614012565b6001600160a01b03831681526040602082015260006136726040830184614012565b600060208284031215615d6a57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a857601f19868403018952815160a08151818652615db482870182614012565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615df08382614012565b6080948501519790940196909652505098840198925090830190600101615d8e565b6020815260006108126020830184615d71565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a857601f19868403018952615e60838351614012565b98840198925090830190600101615e44565b60008151808452602080850194506020840160005b83811015614b2757815163ffffffff1687529582019590820190600101615e87565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f116101a0850183614012565b91506040870151605f198086850301610120870152615f308483614012565b935060608901519150615f4d838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f768282615d71565b9150508281036020840152615f8b8186615e25565b90508281036040840152615ba28185615e7256fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.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 44cf1653c8c..660c45e6784 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 @@ -16,7 +16,7 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin c3cac2010c2815b484055bf981363a2bd04e7fbe7bb502dc8fd29a16165d221c multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin a523e11ea4c069d7d61b309c156951cc6834aff0f352bd1ac37c3a838ff2588f nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin e6008490d916826cefd1903612db39621d51617300fc9bb42b68c6c117958198 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 067fdfbf7cae1557fc03ca16d9c38737ee4595655792a1b8bc4846c45caa0c74 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8bc4ced67140c757cc483f19f797634bbc170350ca86890a0a9f189c45cab77a onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 2bf74188a997218502031f177cb2df505b272d66b25fd341a741289e77380c59 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 24b4415a883a470d65c484be0fa20714a46b1c9262db205f1c958017820307b2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 0fc277a0b512db4e20b5a32a775b94ed2c0d342d8237511de78c94f7dacad428 From e6af75f0dcb7ad1e9b39cd245783b69b3426b095 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 17 Dec 2024 13:55:59 -0500 Subject: [PATCH 05/15] fill in coverage gaps --- contracts/gas-snapshots/ccip.gas-snapshot | 1520 +++++++++-------- .../ccip/test/libraries/ERC165Checker.t.sol | 49 +- 2 files changed, 806 insertions(+), 763 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index e5472fc1b76..d33f64df1db 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -1,758 +1,762 @@ -ARMProxy_constructor:test_Constructor() (gas: 302231) -ARMProxy_isCursed:test_IsCursed_Success() (gas: 47209) -ARMProxy_isCursed:test_call_ARMCallEmptyContract_Revert() (gas: 19412) -ARMProxy_isCursed:test_isCursed_RevertReasonForwarded_Revert() (gas: 45210) -ARMProxy_setARM:test_SetARM() (gas: 16599) -ARMProxy_setARM:test_SetARMzero() (gas: 11275) -BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27346) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244452) -BurnFromMintTokenPool_lockOrBurn:test_setup_Success() (gas: 24210) -BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27486) -BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) -BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 242352) -BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 17852) -BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 27287) -BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 54624) -BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 109426) -BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 242805) -BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27346) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244496) -BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24223) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2078199) -CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332619) -CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458568) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289191) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 289486) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292216) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 288824) -CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 336363) -CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 290590) -CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290055) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 308646) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1191231) -CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 288918) -CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289112) -CCIPHome__validateConfig:test__validateConfig_Success() (gas: 299797) -CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773105) -CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293455) -CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 293503) -CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 187822) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 350051) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 18089) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 282212) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14976) -CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 373475) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 38098) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11783) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11015) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 37072) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1455674) -CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63865) -CCIPHome_constructor:test_constructor_success() (gas: 3531036) -CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2773023) -CCIPHome_getCapabilityConfiguration:test_getCapabilityConfiguration_success() (gas: 9116) -CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2547513) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 9110) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23074) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 8840) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5113754) -CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9024) -CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19084) -CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8773) -CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30676) -CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 29383) -CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1395154) -CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) -CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 9885) -DefensiveExampleTest:test_HappyPath_Success() (gas: 200540) -DefensiveExampleTest:test_Recovery() (gas: 425013) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1513205) -ERC165CheckerTest:test_supportsInterface() (gas: 8450) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 15753) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 99953) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 76182) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 99974) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 145007) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 80439) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 80604) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 96107) -EtherSenderReceiverTest_constructor:test_constructor() (gas: 17575) -EtherSenderReceiverTest_getFee:test_getFee() (gas: 27456) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20355) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 16682) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16615) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 25456) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 25373) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17969) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25328) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26348) -FactoryBurnMintERC20_approve:test_Approve_Success() (gas: 55819) -FactoryBurnMintERC20_approve:test_InvalidAddress_Reverts() (gas: 10703) -FactoryBurnMintERC20_burn:test_BasicBurn_Success() (gas: 172464) -FactoryBurnMintERC20_burn:test_BurnFromZeroAddress_Reverts() (gas: 47338) -FactoryBurnMintERC20_burn:test_ExceedsBalance_Reverts() (gas: 22005) -FactoryBurnMintERC20_burn:test_SenderNotBurner_Reverts() (gas: 13520) -FactoryBurnMintERC20_burnFrom:test_BurnFrom_Success() (gas: 58274) -FactoryBurnMintERC20_burnFrom:test_ExceedsBalance_Reverts() (gas: 36191) -FactoryBurnMintERC20_burnFrom:test_InsufficientAllowance_Reverts() (gas: 22113) -FactoryBurnMintERC20_burnFrom:test_SenderNotBurner_Reverts() (gas: 13487) -FactoryBurnMintERC20_burnFromAlias:test_BurnFrom_Success() (gas: 58248) -FactoryBurnMintERC20_burnFromAlias:test_ExceedsBalance_Reverts() (gas: 36155) -FactoryBurnMintERC20_burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 22068) -FactoryBurnMintERC20_burnFromAlias:test_SenderNotBurner_Reverts() (gas: 13442) -FactoryBurnMintERC20_constructor:test_Constructor_Success() (gas: 1450638) -FactoryBurnMintERC20_decreaseApproval:test_DecreaseApproval_Success() (gas: 31419) -FactoryBurnMintERC20_getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 12717) -FactoryBurnMintERC20_getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 23874) -FactoryBurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 121194) -FactoryBurnMintERC20_grantRole:test_GrantBurnAccess_Success() (gas: 53403) -FactoryBurnMintERC20_grantRole:test_GrantMany_Success() (gas: 961486) -FactoryBurnMintERC20_grantRole:test_GrantMintAccess_Success() (gas: 94165) -FactoryBurnMintERC20_increaseApproval:test_IncreaseApproval_Success() (gas: 44398) -FactoryBurnMintERC20_mint:test_BasicMint_Success() (gas: 149804) -FactoryBurnMintERC20_mint:test_MaxSupplyExceeded_Reverts() (gas: 50679) -FactoryBurnMintERC20_mint:test_SenderNotMinter_Reverts() (gas: 11405) -FactoryBurnMintERC20_supportsInterface:test_SupportsInterface_Success() (gas: 11538) -FactoryBurnMintERC20_transfer:test_InvalidAddress_Reverts() (gas: 10701) -FactoryBurnMintERC20_transfer:test_Transfer_Success() (gas: 42482) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16846) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16759) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16813) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41239) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroInput_Success() (gas: 12563) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140709) -FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162719) -FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12263) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11476) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54860) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45257) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12368) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 89062) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13346) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17435) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12349) -FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106632) -FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 110982) -FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111057) -FeeQuoter_constructor:test_Setup_Success() (gas: 5014619) -FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68416) -FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29300) -FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96433) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14857) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20988) -FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 73071) -FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26476) -FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 112065) -FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16184) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 109175) -FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 68059) -FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33529) -FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78516) -FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 37307) -FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 35086) -FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28176) -FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 96089) -FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20615) -FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27984) -FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 28029) -FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40822) -FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29736) -FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18465) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 83484) -FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53570) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239880) -FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22668) -FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29966) -FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100417) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 143562) -FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21280) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 115060) -FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 23495) -FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63981) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1897852) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1897810) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1877929) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1897584) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1897788) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1897600) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 65232) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 65112) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58894) -FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1897226) -FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61843) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116970) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 14182) -FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1895903) -FeeQuoter_onReport:test_OnReport_SkipPriceUpdateWhenStaleUpdateReceived() (gas: 52614) -FeeQuoter_onReport:test_onReport() (gas: 89071) -FeeQuoter_onReport:test_onReport_withKeystoneForwarderContract() (gas: 122700) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17381) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21553) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 18613) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18153) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18467) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18590) -FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 21476) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44974) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 20008) -FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20405) -FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17976) -FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 123405) -FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42236) -FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28702) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 30021) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 76515) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28300) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26159) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19595) -FeeQuoter_supportsInterface:test_SupportsInterface_Success() (gas: 13263) -FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12198) -FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23872) -FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28648) -FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74816) -FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145691) -FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52443) -FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 66423) -FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20124) -FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 93563) -FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 53142) -FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12431) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10710) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 4057945) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10906) -FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6841) -FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6567) -HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 176859) -HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_transferLiquidity_Success() (gas: 167004) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_PrimaryMechanism_Success() (gas: 135878) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_WhileMigrationPause_Revert() (gas: 109718) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_Success() (gas: 146937) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209160) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 213127) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 109646) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 265910) -LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3209936) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 29734) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 80625) -LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59227) -LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3206264) -LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 11511) -LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 74100) -LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 54745) -LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 223256) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11003) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18182) -LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10250) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83328) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 56101) -LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60188) -LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11464) -MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5456) -MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3563) -MerkleMultiProofTest:test_MerkleRoot256() (gas: 394891) -MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 3661) -MerkleMultiProofTest:test_SpecSync_gas() (gas: 34152) -MockRouterTest:test_ccipSendWithEVMExtraArgsV1_Success() (gas: 110095) -MockRouterTest:test_ccipSendWithEVMExtraArgsV2_Success() (gas: 132614) -MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 34059) -MockRouterTest:test_ccipSendWithInvalidEVMExtraArgs_Revert() (gas: 106706) -MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60864) -MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126741) -MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63499) -MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44070) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 16554) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 16634) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 16585) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DisableConfigRateNonZero_Revert() (gas: 16571) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 133973) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 316663) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 17490) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 76620) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 76603) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 38739) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53937) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 17154) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 12481) -MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1977286) -MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2093583) -MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 30794) -MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 48169) -MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15907) -MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17624) -MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21652) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14636) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210637) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58473) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17791) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45202) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46514) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76999) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 309039) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50680) -MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51331) -MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19375) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15914) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210357) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60266) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 47025) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48305) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 78006) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308985) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52450) -MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 10967) -MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19190) -MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10642) -MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 18518) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 281000) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 255391) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 205169) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 29012) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_AbiEncoded_Revert() (gas: 14001) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18365) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18294) -MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59441) -MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44190) -MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 104844) -MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 18908) -MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283842) -MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422489) -MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 512288) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 680609) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 829200) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 457530) -MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12436) -MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2142528) -MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141905) -MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807791) -MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158911) -MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 112357) -MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254293) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 861787) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 476186) -MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 42765) -MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 48348) -MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 76893) -MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 65621) -MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 33387) -MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 79597) -MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 33589) -MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 47082) -MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 25583) -MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 18615) -MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24193) -MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 60994) -MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39824) -MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32920) -NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123604) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45986) -NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889) -NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12169) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 185881) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 153036) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 189356) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 252504) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 220732) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60520) -NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37979) -NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38756) -NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 23759) -NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 71901) -NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105300) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166146) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 195937) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 140158) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5909973) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626094) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166505) -OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16719) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 274389) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168604) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181037) -OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) -OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72724) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) -OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 284695) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177651) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333753) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277019) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168589) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188293) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 156587) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 545791) -OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10643) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92450) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63117) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 69655) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 65803) -OffRamp_commit:test_InvalidRootRevert() (gas: 64898) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670763) -OffRamp_commit:test_NoConfig_Revert() (gas: 6254181) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112728) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 120561) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112660) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 354785) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 163983) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 140923) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 147631) -OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 153596) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 61365) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 231709) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125027) -OffRamp_commit:test_Unhealthy_Revert() (gas: 60177) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206221) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53305) -OffRamp_constructor:test_Constructor_Success() (gas: 6216958) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137127) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103837) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101686) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162609) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101606) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101607) -OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17532) -OffRamp_execute:test_LargeBatch_Success() (gas: 3380247) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371269) -OffRamp_execute:test_MultipleReports_Success() (gas: 298986) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079301) -OffRamp_execute:test_NoConfig_Revert() (gas: 6303771) -OffRamp_execute:test_NonArray_Revert() (gas: 27572) -OffRamp_execute:test_SingleReport_Success() (gas: 175691) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147850) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6970909) -OffRamp_execute:test_ZeroReports_Revert() (gas: 17248) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56273) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 238250) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 92054) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 268403) -OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28659) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 15530) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 474978) -OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48296) -OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 34101) -OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28824) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187737) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197869) -OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40687) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 405083) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248906) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192550) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212576) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243719) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141570) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 402802) -OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58242) -OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73812) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 574696) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 523247) -OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 26795) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 541323) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 541270) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 452360) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135291) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164952) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3905742) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 121048) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89737) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81694) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74284) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172699) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 213371) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27248) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165935) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27774) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55362) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 489789) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 315041) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2224914) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165390) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226281) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226821) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 775319) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344966) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37652) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101525) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36850) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91490) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 83578) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 168992) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 62882) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 78486) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 170862) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 182101) -OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11465) -OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13975) -OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47491) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25464) -OffRamp_trialExecute:test_trialExecute() (gas: 272039) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127605) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138915) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289680) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251893) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67101) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 325983) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65892) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 12902) -OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2569362) -OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95148) -OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93090) -OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98066) -OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93146) -OnRamp_constructor:test_Constructor_Success() (gas: 2647459) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115432) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146300) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145875) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144080) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146072) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145470) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140731) -OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38526) -OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143112) -OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36611) -OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36493) -OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18290) -OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38412) -OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23629) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186715) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 213144) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147070) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161303) -OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 4073863) -OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24015) -OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75854) -OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38588) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 281529) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 99028) -OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65475) -OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87287) -OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35166) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 114201) -OnRamp_getFee:test_Unhealthy_Revert() (gas: 17040) -OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) -OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35405) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11535) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 13194) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 11499) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 11938) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13264) -OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56440) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 125901) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172964) -PingPong_setOutOfOrderExecution:test_OutOfOrderExecution_Success() (gas: 20283) -PingPong_setPaused:test_Pausing_Success() (gas: 17738) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 152077) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 177692) -RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1079685) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23879) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 10597) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 10843) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1085033) -RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19041) -RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 10889) -RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 10628) -RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 28147) -RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 597564) -RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 15071) -RMNHome_setCandidate:test_setCandidate_success() (gas: 589330) -RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 30186) -RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 18854) -RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14009) -RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 104862) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18850) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18710) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20387) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 21405) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137318) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20522) -RMNRemote_constructor:test_constructor() (gas: 8398) -RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154501) -RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18734) -RMNRemote_curse:test_curse_success() (gas: 149475) -RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 71715) -RMNRemote_isBlessed:test_isBlessed() (gas: 17588) -RMNRemote_setConfig:test_setConfig_ZeroValueNotAllowed_revert() (gas: 37971) -RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 993448) -RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323540) -RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80201) -RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 54232) -RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51940) -RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18615) -RMNRemote_uncurse:test_uncurse_success() (gas: 40135) -RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13600) -RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 96471) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 94289) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 101352) -RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 304744) -RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 428284) -RMNRemote_verify_withConfigSet:test_verify_success() (gas: 86181) -RateLimiter_constructor:test_Constructor_Success() (gas: 19806) -RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 16042) -RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 22435) -RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 31495) -RateLimiter_consume:test_ConsumeTokens_Success() (gas: 20403) -RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 40693) -RateLimiter_consume:test_ConsumingMoreThanUint128_Revert() (gas: 15800) -RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 25781) -RateLimiter_consume:test_Refill_Success() (gas: 37447) -RateLimiter_consume:test_TokenMaxCapacityExceeded_Revert() (gas: 18388) -RateLimiter_consume:test_TokenRateLimitReached_Revert() (gas: 24930) -RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 38947) -RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 46852) -RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 38509) -RegistryModuleOwnerCustom_constructor:test_constructor_Revert() (gas: 36107) -RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Revert() (gas: 20200) -RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Success() (gas: 130631) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 19797) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 130126) -RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 19602) -RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 129930) -Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 10749731) -Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 56422) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131531) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 221794) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71942) -Router_ccipSend:test_InvalidMsgValue() (gas: 32411) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69608) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 193486) -Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61634) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 192090) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226667) -Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 25056) -Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 45056) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 194399) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140780) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230978) -Router_constructor:test_Constructor_Success() (gas: 13222) -Router_getArmProxy:test_getArmProxy() (gas: 10573) -Router_getFee:test_GetFeeSupportedChain_Success() (gas: 52018) -Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17385) -Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) -Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11410) -Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 20199) -Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 11236) -Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 349502) -Router_recoverTokens:test_RecoverTokens_Success() (gas: 52667) -Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 43213) -Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 159418) -Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 35723) -Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 25376) -Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 44812) -Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 11030) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51433) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 44189) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 12662) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 67155) -TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 11395) -TokenAdminRegistry_getPool:test_getPool_Success() (gas: 17701) -TokenAdminRegistry_getPools:test_getPools_Success() (gas: 40331) -TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 106315) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 104412) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 15643) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 15177) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 113094) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 108031) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 116216) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 12651) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 54735) -TokenAdminRegistry_setPool:test_setPool_InvalidTokenPoolToken_Revert() (gas: 19316) -TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 18170) -TokenAdminRegistry_setPool:test_setPool_Success() (gas: 36267) -TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30875) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18202) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49592) -TokenPoolFactory_constructor:test_constructor_Revert() (gas: 1121653) -TokenPoolFactory_createTokenPool:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 12612969) -TokenPoolFactory_createTokenPool:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 6513874) -TokenPoolFactory_createTokenPool:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 13434268) -TokenPoolFactory_createTokenPool:test_createTokenPool_RemoteTokenHasDifferentDecimals_Success() (gas: 13441570) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 13771048) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 6301066) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 6510314) -TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 2827849) -TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12119) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23567) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 178398) -TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 23929) -TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8408) -TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 25005) -TokenPoolWithAllowList_setRouter:test_ZeroAddressNotAllowed_Revert() (gas: 10729) -TokenPool_addRemotePool:test_NonExistentChain_Revert() (gas: 14222) -TokenPool_addRemotePool:test_PoolAlreadyAdded_Revert() (gas: 117205) -TokenPool_addRemotePool:test_ZeroLengthAddressNotAllowed_Revert() (gas: 14014) -TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 472820) -TokenPool_addRemotePool:test_addRemotePool_Success() (gas: 157095) -TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 455575) -TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 15032) -TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 11863) -TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 592089) -TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1077776) -TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 226472) -TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 93680) -TokenPool_constructor:test_constructor() (gas: 21930) -TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 2824157) -TokenPool_getRemotePool:test_getRemotePools() (gas: 330500) -TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 21504) -TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 240435) -TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 94291) -TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 21156) -TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 204376) -TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 49238) -TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 14020) -TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 9727) -TokenPool_removeRemotePool:test_InvalidRemotePoolForChain_Revert() (gas: 17499) -TokenPool_removeRemotePool:test_NonExistentChain_Revert() (gas: 14344) -TokenPool_removeRemotePool:test_removeRemotePool_Success() (gas: 188387) -TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 17214) -TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 15307) -TokenPool_setChainRateLimiterConfigs:test_MismatchedArrayLengths_Revert() (gas: 23960) -TokenPool_setChainRateLimiterConfigs:test_NonExistentChain_Revert() (gas: 19424) -TokenPool_setChainRateLimiterConfigs:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 16511) -TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11002) -TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 37606) -USDCBridgeMigrator_BurnLockedUSDC:test_PrimaryMechanism_Success() (gas: 135887) -USDCBridgeMigrator_BurnLockedUSDC:test_WhileMigrationPause_Revert() (gas: 109751) -USDCBridgeMigrator_BurnLockedUSDC:test_invalidPermissions_Revert() (gas: 39493) -USDCBridgeMigrator_BurnLockedUSDC:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 309833) -USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_Success() (gas: 146961) -USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209124) -USDCBridgeMigrator_cancelMigrationProposal:test_cancelExistingCCTPMigrationProposal_Success() (gas: 56155) -USDCBridgeMigrator_cancelMigrationProposal:test_cannotCancelANonExistentMigrationProposal_Revert() (gas: 12669) -USDCBridgeMigrator_excludeTokensFromBurn:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 13579) -USDCBridgeMigrator_proposeMigration:test_ChainNotUsingLockRelease_Revert() (gas: 15765) -USDCBridgeMigrator_provideLiquidity:test_PrimaryMechanism_Success() (gas: 136004) -USDCBridgeMigrator_provideLiquidity:test_WhileMigrationPause_Revert() (gas: 109893) -USDCBridgeMigrator_provideLiquidity:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 13390) -USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 67428) -USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidity_AfterMigration_Revert() (gas: 313933) -USDCBridgeMigrator_provideLiquidity:test_invalidPermissions_Revert() (gas: 39493) -USDCBridgeMigrator_provideLiquidity:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 310092) -USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_Success() (gas: 147102) -USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209430) -USDCBridgeMigrator_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 213160) -USDCBridgeMigrator_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 109679) -USDCBridgeMigrator_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 265963) -USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_destChain_Success() (gas: 150538) -USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 511783) -USDCBridgeMigrator_updateChainSelectorMechanism:test_PrimaryMechanism_Success() (gas: 136021) -USDCBridgeMigrator_updateChainSelectorMechanism:test_WhileMigrationPause_Revert() (gas: 109871) -USDCBridgeMigrator_updateChainSelectorMechanism:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 313532) -USDCBridgeMigrator_updateChainSelectorMechanism:test_invalidPermissions_Revert() (gas: 39471) -USDCBridgeMigrator_updateChainSelectorMechanism:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 310092) -USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_Success() (gas: 147057) -USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209483) -USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 26049) -USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35319) -USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 29897) -USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133426) -USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 433430) -USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 265695) -USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 47231) -USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 95262) -USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66437) -USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11314) -USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10107) \ No newline at end of file +ARMProxy_constructor:test_Constructor() (gas: 543485) +ARMProxy_isCursed:test_IsCursed_Success() (gas: 49195) +ARMProxy_isCursed:test_call_ARMCallEmptyContract_Revert() (gas: 20200) +ARMProxy_isCursed:test_isCursed_RevertReasonForwarded_Revert() (gas: 47022) +ARMProxy_setARM:test_SetARM() (gas: 18216) +ARMProxy_setARM:test_SetARMzero() (gas: 12144) +BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 31050) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 293926) +BurnFromMintTokenPool_lockOrBurn:test_setup_Success() (gas: 28205) +BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 30564) +BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) +BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 291447) +BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 20590) +BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 31028) +BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 59960) +BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 118001) +BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 292170) +BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 31050) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 293970) +BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 28239) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 3202977) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 380773) +CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 558994) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 323319) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 323792) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 326840) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 322566) +CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 396028) +CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 325553) +CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 324473) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 354424) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1424879) +CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 322684) +CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 323067) +CCIPHome__validateConfig:test__validateConfig_Success() (gas: 340335) +CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 1177201) +CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 328982) +CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 329095) +CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 199206) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 371940) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 23171) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 299515) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 16588) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 411194) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 53139) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 14017) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 12740) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 51199) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1553428) +CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 67143) +CCIPHome_constructor:test_constructor_success() (gas: 5406956) +CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2917876) +CCIPHome_getCapabilityConfiguration:test_getCapabilityConfiguration_success() (gas: 10222) +CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2632362) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 10152) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 27337) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 9924) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5320500) +CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 10097) +CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 21525) +CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 9666) +CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 39075) +CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 43957) +CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1489850) +CCIPHome_setCandidate:test_setCandidate_success() (gas: 1435475) +CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 11363) +DefensiveExampleTest:test_HappyPath_Success() (gas: 247232) +DefensiveExampleTest:test_Recovery() (gas: 483438) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1924252) +ERC165CheckerTest:test__getSupportedInterfaces() (gas: 11506) +ERC165CheckerTest:test__supportsAllInterfaces() (gas: 10813) +ERC165CheckerTest:test__supportsAllInterfaces_notAllSupported() (gas: 11848) +ERC165CheckerTest:test__supportsAllInterfaces_notSupportsERC165() (gas: 6505) +ERC165CheckerTest:test__supportsInterface() (gas: 10499) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 103832) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 54732) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 21903) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 20674) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 116423) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 91360) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 116371) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 167929) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 98200) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 98574) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 117880) +EtherSenderReceiverTest_constructor:test_constructor() (gas: 19659) +EtherSenderReceiverTest_getFee:test_getFee() (gas: 41273) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 22872) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 18368) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 18398) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 34950) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 34719) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 23796) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 34674) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 36217) +FactoryBurnMintERC20_approve:test_Approve_Success() (gas: 60126) +FactoryBurnMintERC20_approve:test_InvalidAddress_Reverts() (gas: 11582) +FactoryBurnMintERC20_burn:test_BasicBurn_Success() (gas: 185756) +FactoryBurnMintERC20_burn:test_BurnFromZeroAddress_Reverts() (gas: 49486) +FactoryBurnMintERC20_burn:test_ExceedsBalance_Reverts() (gas: 23525) +FactoryBurnMintERC20_burn:test_SenderNotBurner_Reverts() (gas: 14678) +FactoryBurnMintERC20_burnFrom:test_BurnFrom_Success() (gas: 61200) +FactoryBurnMintERC20_burnFrom:test_ExceedsBalance_Reverts() (gas: 38720) +FactoryBurnMintERC20_burnFrom:test_InsufficientAllowance_Reverts() (gas: 23765) +FactoryBurnMintERC20_burnFrom:test_SenderNotBurner_Reverts() (gas: 14656) +FactoryBurnMintERC20_burnFromAlias:test_BurnFrom_Success() (gas: 61174) +FactoryBurnMintERC20_burnFromAlias:test_ExceedsBalance_Reverts() (gas: 38684) +FactoryBurnMintERC20_burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 23720) +FactoryBurnMintERC20_burnFromAlias:test_SenderNotBurner_Reverts() (gas: 14611) +FactoryBurnMintERC20_constructor:test_Constructor_Success() (gas: 2563860) +FactoryBurnMintERC20_decreaseApproval:test_DecreaseApproval_Success() (gas: 35139) +FactoryBurnMintERC20_getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 13369) +FactoryBurnMintERC20_getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 25748) +FactoryBurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 125778) +FactoryBurnMintERC20_grantRole:test_GrantBurnAccess_Success() (gas: 56797) +FactoryBurnMintERC20_grantRole:test_GrantMany_Success() (gas: 993503) +FactoryBurnMintERC20_grantRole:test_GrantMintAccess_Success() (gas: 97852) +FactoryBurnMintERC20_increaseApproval:test_IncreaseApproval_Success() (gas: 48877) +FactoryBurnMintERC20_mint:test_BasicMint_Success() (gas: 153780) +FactoryBurnMintERC20_mint:test_MaxSupplyExceeded_Reverts() (gas: 54585) +FactoryBurnMintERC20_mint:test_SenderNotMinter_Reverts() (gas: 12706) +FactoryBurnMintERC20_supportsInterface:test_SupportsInterface_Success() (gas: 13517) +FactoryBurnMintERC20_transfer:test_InvalidAddress_Reverts() (gas: 11580) +FactoryBurnMintERC20_transfer:test_Transfer_Success() (gas: 45409) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 21590) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 21541) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 21554) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 51004) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroInput_Success() (gas: 13353) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 172660) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 176953) +FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 13390) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12229) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 61146) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 48844) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 13251) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 118275) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 14452) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 21466) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 13371) +FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 128178) +FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 132520) +FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 132589) +FeeQuoter_constructor:test_Setup_Success() (gas: 8090508) +FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 74951) +FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 34509) +FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 127564) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 21001) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 33926) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 78544) +FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 29615) +FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 121958) +FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 17419) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 118590) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 77364) +FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 39680) +FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 87958) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 49295) +FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 46734) +FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 39318) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 159836) +FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 25688) +FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 38968) +FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 39013) +FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 54048) +FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 40373) +FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 23381) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 129237) +FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 66547) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 301237) +FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 28152) +FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 38003) +FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 113239) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 247851) +FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 26901) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 193347) +FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 31192) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 84651) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 3278911) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 3278846) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 3258988) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 3278617) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 3278807) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 3278601) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 72539) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 72306) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 63583) +FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 3278175) +FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 67225) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 123975) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 15928) +FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 3276003) +FeeQuoter_onReport:test_OnReport_SkipPriceUpdateWhenStaleUpdateReceived() (gas: 62628) +FeeQuoter_onReport:test_onReport() (gas: 107453) +FeeQuoter_onReport:test_onReport_withKeystoneForwarderContract() (gas: 145095) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 24396) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 28541) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 25679) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 24574) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 25953) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 26492) +FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 26035) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 54276) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 22230) +FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 22737) +FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 20791) +FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 160061) +FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 50246) +FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 37897) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 36240) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 96867) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 36764) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 33820) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 22673) +FeeQuoter_supportsInterface:test_SupportsInterface_Success() (gas: 15694) +FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 13531) +FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 27676) +FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 32738) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 83756) +FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 165728) +FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 60630) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 80792) +FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 22392) +FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 109196) +FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 61207) +FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 13321) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 12222) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 5634878) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 12371) +FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 7857) +FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 7345) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 185581) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_transferLiquidity_Success() (gas: 177442) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_PrimaryMechanism_Success() (gas: 150310) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_WhileMigrationPause_Revert() (gas: 116337) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_Success() (gas: 156741) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233944) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 231051) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 119005) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 322291) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 5465214) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 32954) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 90891) +LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 63723) +LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 5461041) +LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 12683) +LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 79601) +LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 59982) +LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 271456) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11674) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 19808) +LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 11569) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 88557) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 59902) +LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 64808) +LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 12647) +MerkleMultiProofTest:test_CVE_2023_34459() (gas: 6328) +MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3975) +MerkleMultiProofTest:test_MerkleRoot256() (gas: 668330) +MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 4074) +MerkleMultiProofTest:test_SpecSync_gas() (gas: 49316) +MockRouterTest:test_ccipSendWithEVMExtraArgsV1_Success() (gas: 115223) +MockRouterTest:test_ccipSendWithEVMExtraArgsV2_Success() (gas: 138239) +MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 37132) +MockRouterTest:test_ccipSendWithInvalidEVMExtraArgs_Revert() (gas: 110461) +MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 64056) +MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 135393) +MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 68163) +MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 48451) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 19404) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 19475) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 19441) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DisableConfigRateNonZero_Revert() (gas: 19436) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 150980) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 358370) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 20152) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 85633) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 85559) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 49629) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 68143) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 19539) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 13335) +MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 3299920) +MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 3417369) +MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 38652) +MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 63893) +MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 18526) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 20926) +MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 25677) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 17951) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 243061) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 68524) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 21012) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 53971) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 56680) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 108834) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 345727) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 60275) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 63560) +MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 21607) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 18167) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 240851) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 69317) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 54784) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 57494) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 105910) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 343854) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 61068) +MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11628) +MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 20509) +MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 11127) +MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 25699) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 293683) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 266617) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 215556) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 32610) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_AbiEncoded_Revert() (gas: 16724) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 21127) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 20889) +MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 72030) +MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 49210) +MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 115906) +MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 23222) +MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 296834) +MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 437371) +MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 557004) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 719712) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 874850) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 486337) +MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 13309) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2266813) +MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 152947) +MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 841182) +MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 312066) +MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 261350) +MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 266606) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 930580) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 516817) +MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 49190) +MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 55807) +MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 86384) +MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 74818) +MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 38090) +MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 91440) +MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 39586) +MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 52327) +MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 29676) +MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 20746) +MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 28786) +MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 69269) +MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 42295) +MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 37071) +NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 134793) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 51228) +NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 72529) +NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12873) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 218792) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 182633) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 224796) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 318802) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 272221) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 71664) +NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 40493) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 41857) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 27445) +NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 79896) +NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 123170) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 194174) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 245399) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 175541) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 9321703) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 652168) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 174727) +OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 18183) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 299843) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 177935) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 195433) +OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 15760) +OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 77848) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 17919) +OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 314502) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 223499) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 423551) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 366507) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 207443) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 237494) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 188069) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 703499) +OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 12131) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 108650) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 75722) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 83999) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 78044) +OffRamp_commit:test_InvalidRootRevert() (gas: 76559) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 10124039) +OffRamp_commit:test_NoConfig_Revert() (gas: 9697762) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 129838) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 145439) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 129770) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 422857) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 189039) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 162831) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 176148) +OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 177322) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 73407) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 279805) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 143427) +OffRamp_commit:test_Unhealthy_Revert() (gas: 72677) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 248984) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 62243) +OffRamp_constructor:test_Constructor_Success() (gas: 9661226) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 151485) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 114308) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 112110) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 177038) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 112112) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 112057) +OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 19284) +OffRamp_execute:test_LargeBatch_Success() (gas: 4757160) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 460616) +OffRamp_execute:test_MultipleReports_Success() (gas: 389562) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 10548003) +OffRamp_execute:test_NoConfig_Revert() (gas: 9754918) +OffRamp_execute:test_NonArray_Revert() (gas: 33661) +OffRamp_execute:test_SingleReport_Success() (gas: 208303) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 172164) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 10419963) +OffRamp_execute:test_ZeroReports_Revert() (gas: 18899) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 68697) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 25994) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 269294) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 109393) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 312178) +OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 37023) +OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 18190) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 585002) +OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 60371) +OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 42950) +OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 37447) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 221269) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 237104) +OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 52271) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 624403) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 296659) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 251603) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 270652) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 306789) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 167631) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 492910) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 71900) +OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 86457) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 719832) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 652563) +OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 35247) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 696760) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 696674) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 560308) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 172028) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 201533) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 5737068) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 148136) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 111806) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 127938) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 103927) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 207738) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 260054) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 37666) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 267495) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 38194) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 73034) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 741227) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 405900) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 3569174) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 199666) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 278769) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 279465) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 1023883) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 458228) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 47685) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 117845) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 44163) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 105712) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 96972) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 198950) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 74940) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 91066) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 201751) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 209570) +OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 12828) +OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 15498) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 52690) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 30656) +OffRamp_trialExecute:test_trialExecute() (gas: 321147) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 150643) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 163361) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 378214) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 322791) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 20254) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 80819) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 355512) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 80773) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 15108) +OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 4156644) +OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 102460) +OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 100366) +OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 105352) +OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 100419) +OnRamp_constructor:test_Constructor_Success() (gas: 4240371) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 134412) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 166362) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 165249) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 162480) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 165490) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 164531) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 158770) +OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 42724) +OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 159236) +OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 41356) +OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 40275) +OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 20626) +OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 44254) +OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 26222) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 248663) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 275830) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 167025) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 185687) +OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 6289182) +OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 26986) +OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 83046) +OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 43350) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 330143) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 139289) +OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 79814) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 114560) +OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 41748) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 169020) +OnRamp_getFee:test_Unhealthy_Revert() (gas: 19970) +OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 11166) +OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 41932) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 13226) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 15548) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 13280) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 13885) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 15615) +OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 65082) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 136079) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 202620) +PingPong_setOutOfOrderExecution:test_OutOfOrderExecution_Success() (gas: 21829) +PingPong_setPaused:test_Pausing_Success() (gas: 19036) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 180163) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 206337) +RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1141201) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 27408) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 11404) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 11832) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1155666) +RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 20941) +RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 11645) +RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 11193) +RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 34858) +RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 663743) +RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 19206) +RMNHome_setCandidate:test_setCandidate_success() (gas: 634730) +RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 35645) +RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 21662) +RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 16620) +RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 130187) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 27054) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 26920) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 29055) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 31068) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 370126) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 29313) +RMNRemote_constructor:test_constructor() (gas: 8917) +RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 156826) +RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 20234) +RMNRemote_curse:test_curse_success() (gas: 157303) +RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 76181) +RMNRemote_isBlessed:test_isBlessed() (gas: 23709) +RMNRemote_setConfig:test_setConfig_ZeroValueNotAllowed_revert() (gas: 44318) +RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 1114504) +RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 339630) +RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 91847) +RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 65053) +RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 53961) +RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 20126) +RMNRemote_uncurse:test_uncurse_success() (gas: 44231) +RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 14554) +RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 108335) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 105908) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 113138) +RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 384051) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 499682) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 97508) +RateLimiter_constructor:test_Constructor_Success() (gas: 22964) +RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 19839) +RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 28311) +RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 39405) +RateLimiter_consume:test_ConsumeTokens_Success() (gas: 21919) +RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 57402) +RateLimiter_consume:test_ConsumingMoreThanUint128_Revert() (gas: 19531) +RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 33020) +RateLimiter_consume:test_Refill_Success() (gas: 48170) +RateLimiter_consume:test_TokenMaxCapacityExceeded_Revert() (gas: 22450) +RateLimiter_consume:test_TokenRateLimitReached_Revert() (gas: 31168) +RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 49681) +RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 63750) +RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 48144) +RegistryModuleOwnerCustom_constructor:test_constructor_Revert() (gas: 36866) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Revert() (gas: 24071) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Success() (gas: 139023) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 22539) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 137363) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 22381) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 137204) +Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 12348578) +Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 65151) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 156308) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 266527) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 88028) +Router_ccipSend:test_InvalidMsgValue() (gas: 35938) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 83614) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 233815) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 75147) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 231681) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 255497) +Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 28638) +Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 48577) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 236158) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 166571) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 276725) +Router_constructor:test_Constructor_Success() (gas: 14582) +Router_getArmProxy:test_getArmProxy() (gas: 11284) +Router_getFee:test_GetFeeSupportedChain_Success() (gas: 65608) +Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 20945) +Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 11166) +Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 12896) +Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 21360) +Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 12754) +Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 603372) +Router_recoverTokens:test_RecoverTokens_Success() (gas: 59820) +Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 52528) +Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 183094) +Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 41682) +Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 28289) +Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 47700) +Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 11766) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 58611) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 50532) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 13827) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 70299) +TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 12680) +TokenAdminRegistry_getPool:test_getPool_Success() (gas: 18715) +TokenAdminRegistry_getPools:test_getPools_Success() (gas: 48227) +TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 113817) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 109448) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 17535) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 16768) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 123237) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 114205) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 123911) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 13783) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 58233) +TokenAdminRegistry_setPool:test_setPool_InvalidTokenPoolToken_Revert() (gas: 21992) +TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 20133) +TokenAdminRegistry_setPool:test_setPool_Success() (gas: 41047) +TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 35795) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 20198) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 54743) +TokenPoolFactory_constructor:test_constructor_Revert() (gas: 1664801) +TokenPoolFactory_createTokenPool:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 21590205) +TokenPoolFactory_createTokenPool:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 11006352) +TokenPoolFactory_createTokenPool:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 22775629) +TokenPoolFactory_createTokenPool:test_createTokenPool_RemoteTokenHasDifferentDecimals_Success() (gas: 22786244) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 23225227) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 10847802) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 10998039) +TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 4802376) +TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 13060) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 26767) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 189561) +TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 25808) +TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8811) +TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 28126) +TokenPoolWithAllowList_setRouter:test_ZeroAddressNotAllowed_Revert() (gas: 11226) +TokenPool_addRemotePool:test_NonExistentChain_Revert() (gas: 15347) +TokenPool_addRemotePool:test_PoolAlreadyAdded_Revert() (gas: 119828) +TokenPool_addRemotePool:test_ZeroLengthAddressNotAllowed_Revert() (gas: 14735) +TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 539852) +TokenPool_addRemotePool:test_addRemotePool_Success() (gas: 163132) +TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 492222) +TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 16194) +TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 12692) +TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 643871) +TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1115319) +TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 236415) +TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 155686) +TokenPool_constructor:test_constructor() (gas: 24865) +TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 4798372) +TokenPool_getRemotePool:test_getRemotePools() (gas: 342823) +TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 24111) +TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 253319) +TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 98072) +TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 23403) +TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 216953) +TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 52635) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 17471) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 10997) +TokenPool_removeRemotePool:test_InvalidRemotePoolForChain_Revert() (gas: 18967) +TokenPool_removeRemotePool:test_NonExistentChain_Revert() (gas: 15458) +TokenPool_removeRemotePool:test_removeRemotePool_Success() (gas: 201681) +TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 19534) +TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 17807) +TokenPool_setChainRateLimiterConfigs:test_MismatchedArrayLengths_Revert() (gas: 28186) +TokenPool_setChainRateLimiterConfigs:test_NonExistentChain_Revert() (gas: 22589) +TokenPool_setChainRateLimiterConfigs:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 19017) +TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11673) +TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 39566) +USDCBridgeMigrator_BurnLockedUSDC:test_PrimaryMechanism_Success() (gas: 150310) +USDCBridgeMigrator_BurnLockedUSDC:test_WhileMigrationPause_Revert() (gas: 116359) +USDCBridgeMigrator_BurnLockedUSDC:test_invalidPermissions_Revert() (gas: 41517) +USDCBridgeMigrator_BurnLockedUSDC:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_Success() (gas: 156741) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233891) +USDCBridgeMigrator_cancelMigrationProposal:test_cancelExistingCCTPMigrationProposal_Success() (gas: 59397) +USDCBridgeMigrator_cancelMigrationProposal:test_cannotCancelANonExistentMigrationProposal_Revert() (gas: 12892) +USDCBridgeMigrator_excludeTokensFromBurn:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 14686) +USDCBridgeMigrator_proposeMigration:test_ChainNotUsingLockRelease_Revert() (gas: 16609) +USDCBridgeMigrator_provideLiquidity:test_PrimaryMechanism_Success() (gas: 150332) +USDCBridgeMigrator_provideLiquidity:test_WhileMigrationPause_Revert() (gas: 116381) +USDCBridgeMigrator_provideLiquidity:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 15364) +USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 70208) +USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidity_AfterMigration_Revert() (gas: 341846) +USDCBridgeMigrator_provideLiquidity:test_invalidPermissions_Revert() (gas: 41561) +USDCBridgeMigrator_provideLiquidity:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_Success() (gas: 156763) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233908) +USDCBridgeMigrator_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 231051) +USDCBridgeMigrator_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 119005) +USDCBridgeMigrator_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 322291) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_destChain_Success() (gas: 170683) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 584661) +USDCBridgeMigrator_updateChainSelectorMechanism:test_PrimaryMechanism_Success() (gas: 150310) +USDCBridgeMigrator_updateChainSelectorMechanism:test_WhileMigrationPause_Revert() (gas: 116359) +USDCBridgeMigrator_updateChainSelectorMechanism:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 341576) +USDCBridgeMigrator_updateChainSelectorMechanism:test_invalidPermissions_Revert() (gas: 41495) +USDCBridgeMigrator_updateChainSelectorMechanism:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_Success() (gas: 156741) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233961) +USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 37856) +USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 39375) +USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 33446) +USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 146887) +USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 501297) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 321637) +USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 54234) +USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 107436) +USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 74526) +USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11941) +USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 11435) \ No newline at end of file diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol index 2c0e822737c..6ea4aeb4ce4 100644 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol @@ -11,16 +11,55 @@ import {Test} from "forge-std/Test.sol"; contract ERC165CheckerTest is Test { using ERC165Checker for address; - MaybeRevertMessageReceiver internal s_receiver; + address internal s_receiver; bytes4 public constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; constructor() { - s_receiver = new MaybeRevertMessageReceiver(false); + s_receiver = address(new MaybeRevertMessageReceiver(false)); } - function test_supportsInterface() public view { - assertTrue(s_receiver.supportsInterface(type(IAny2EVMMessageReceiver).interfaceId)); + function test__supportsInterface() public view { + assertTrue(s_receiver._supportsInterface(type(IAny2EVMMessageReceiver).interfaceId)); + } + + function test__getSupportedInterfaces() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + bool[] memory supportedIds = s_receiver._getSupportedInterfaces(interfaceIds); + assertTrue(supportedIds[0]); + assertEq(interfaceIds.length, supportedIds.length); + } + + function test__supportsAllInterfaces() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + assertTrue(s_receiver._supportsAllInterfaces(interfaceIds)); + } + + function test__supportsAllInterfaces_notAllSupported() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + assertFalse(s_receiver._supportsAllInterfaces(interfaceIds)); + } + + function test__supportsAllInterfaces_notSupportsERC165() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + // An address that does not support ERC165 + address randomAddress = address(0xdead); + + assertFalse(randomAddress._supportsAllInterfaces(interfaceIds)); } function test_supportsInterface_RevertWhen_NotEnoughGasForSupportsInterface() public { @@ -35,6 +74,6 @@ contract ERC165CheckerTest is Test { // Meant to test the call with a manual gas limit override function invokeERC165Checker() external view { - address(s_receiver)._supportsInterface(EXAMPLE_INTERFACE_ID); + s_receiver._supportsInterface(EXAMPLE_INTERFACE_ID); } } From 018930cc889c0c7ff799ba0f523b04d051c481f3 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 17 Dec 2024 14:06:46 -0500 Subject: [PATCH 06/15] so many snapshots i might as well open a photography studio --- contracts/gas-snapshots/ccip.gas-snapshot | 1514 ++++++++++----------- 1 file changed, 757 insertions(+), 757 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index d33f64df1db..0bdf235593f 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -1,762 +1,762 @@ -ARMProxy_constructor:test_Constructor() (gas: 543485) -ARMProxy_isCursed:test_IsCursed_Success() (gas: 49195) -ARMProxy_isCursed:test_call_ARMCallEmptyContract_Revert() (gas: 20200) -ARMProxy_isCursed:test_isCursed_RevertReasonForwarded_Revert() (gas: 47022) -ARMProxy_setARM:test_SetARM() (gas: 18216) -ARMProxy_setARM:test_SetARMzero() (gas: 12144) -BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 31050) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 293926) -BurnFromMintTokenPool_lockOrBurn:test_setup_Success() (gas: 28205) -BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 30564) -BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) -BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 291447) -BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 20590) -BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 31028) -BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 59960) -BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 118001) -BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 292170) -BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 31050) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59385) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 293970) -BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 28239) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 3202977) -CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 380773) -CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 558994) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 323319) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 323792) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 326840) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 322566) -CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 396028) -CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 325553) -CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 324473) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 354424) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1424879) -CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 322684) -CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 323067) -CCIPHome__validateConfig:test__validateConfig_Success() (gas: 340335) -CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 1177201) -CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 328982) -CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 329095) -CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 199206) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 371940) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 23171) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 299515) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 16588) -CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 411194) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 53139) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 14017) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 12740) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 51199) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1553428) -CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 67143) -CCIPHome_constructor:test_constructor_success() (gas: 5406956) -CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2917876) -CCIPHome_getCapabilityConfiguration:test_getCapabilityConfiguration_success() (gas: 10222) -CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2632362) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 10152) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 27337) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 9924) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5320500) -CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 10097) -CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 21525) -CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 9666) -CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 39075) -CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 43957) -CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1489850) -CCIPHome_setCandidate:test_setCandidate_success() (gas: 1435475) -CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 11363) -DefensiveExampleTest:test_HappyPath_Success() (gas: 247232) -DefensiveExampleTest:test_Recovery() (gas: 483438) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1924252) +ARMProxy_constructor:test_Constructor() (gas: 302231) +ARMProxy_isCursed:test_IsCursed_Success() (gas: 47209) +ARMProxy_isCursed:test_call_ARMCallEmptyContract_Revert() (gas: 19412) +ARMProxy_isCursed:test_isCursed_RevertReasonForwarded_Revert() (gas: 45210) +ARMProxy_setARM:test_SetARM() (gas: 16599) +ARMProxy_setARM:test_SetARMzero() (gas: 11275) +BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27346) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244452) +BurnFromMintTokenPool_lockOrBurn:test_setup_Success() (gas: 24210) +BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27486) +BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) +BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 242352) +BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 17852) +BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 27287) +BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 54624) +BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 109426) +BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 242805) +BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27346) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 54878) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244496) +BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24223) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2078199) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332619) +CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458568) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289191) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 289486) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292216) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 288824) +CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 336363) +CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 290590) +CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290055) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 308646) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1191231) +CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 288918) +CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289112) +CCIPHome__validateConfig:test__validateConfig_Success() (gas: 299797) +CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773105) +CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293455) +CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 293503) +CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 187822) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 350051) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 18089) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 282212) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14976) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 373475) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 38098) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11783) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11015) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 37072) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1455674) +CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63865) +CCIPHome_constructor:test_constructor_success() (gas: 3531036) +CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2773023) +CCIPHome_getCapabilityConfiguration:test_getCapabilityConfiguration_success() (gas: 9116) +CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2547513) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 9110) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23074) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 8840) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5113754) +CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9024) +CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19084) +CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8773) +CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30676) +CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 29383) +CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1395154) +CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) +CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 9885) +DefensiveExampleTest:test_HappyPath_Success() (gas: 200540) +DefensiveExampleTest:test_Recovery() (gas: 425013) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1513205) ERC165CheckerTest:test__getSupportedInterfaces() (gas: 11506) ERC165CheckerTest:test__supportsAllInterfaces() (gas: 10813) ERC165CheckerTest:test__supportsAllInterfaces_notAllSupported() (gas: 11848) ERC165CheckerTest:test__supportsAllInterfaces_notSupportsERC165() (gas: 6505) ERC165CheckerTest:test__supportsInterface() (gas: 10499) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 103832) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 54732) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 21903) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 20674) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 116423) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 91360) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 116371) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 167929) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 98200) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 98574) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 117880) -EtherSenderReceiverTest_constructor:test_constructor() (gas: 19659) -EtherSenderReceiverTest_getFee:test_getFee() (gas: 41273) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 22872) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 18368) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 18398) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 34950) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 34719) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 23796) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 34674) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 36217) -FactoryBurnMintERC20_approve:test_Approve_Success() (gas: 60126) -FactoryBurnMintERC20_approve:test_InvalidAddress_Reverts() (gas: 11582) -FactoryBurnMintERC20_burn:test_BasicBurn_Success() (gas: 185756) -FactoryBurnMintERC20_burn:test_BurnFromZeroAddress_Reverts() (gas: 49486) -FactoryBurnMintERC20_burn:test_ExceedsBalance_Reverts() (gas: 23525) -FactoryBurnMintERC20_burn:test_SenderNotBurner_Reverts() (gas: 14678) -FactoryBurnMintERC20_burnFrom:test_BurnFrom_Success() (gas: 61200) -FactoryBurnMintERC20_burnFrom:test_ExceedsBalance_Reverts() (gas: 38720) -FactoryBurnMintERC20_burnFrom:test_InsufficientAllowance_Reverts() (gas: 23765) -FactoryBurnMintERC20_burnFrom:test_SenderNotBurner_Reverts() (gas: 14656) -FactoryBurnMintERC20_burnFromAlias:test_BurnFrom_Success() (gas: 61174) -FactoryBurnMintERC20_burnFromAlias:test_ExceedsBalance_Reverts() (gas: 38684) -FactoryBurnMintERC20_burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 23720) -FactoryBurnMintERC20_burnFromAlias:test_SenderNotBurner_Reverts() (gas: 14611) -FactoryBurnMintERC20_constructor:test_Constructor_Success() (gas: 2563860) -FactoryBurnMintERC20_decreaseApproval:test_DecreaseApproval_Success() (gas: 35139) -FactoryBurnMintERC20_getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 13369) -FactoryBurnMintERC20_getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 25748) -FactoryBurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 125778) -FactoryBurnMintERC20_grantRole:test_GrantBurnAccess_Success() (gas: 56797) -FactoryBurnMintERC20_grantRole:test_GrantMany_Success() (gas: 993503) -FactoryBurnMintERC20_grantRole:test_GrantMintAccess_Success() (gas: 97852) -FactoryBurnMintERC20_increaseApproval:test_IncreaseApproval_Success() (gas: 48877) -FactoryBurnMintERC20_mint:test_BasicMint_Success() (gas: 153780) -FactoryBurnMintERC20_mint:test_MaxSupplyExceeded_Reverts() (gas: 54585) -FactoryBurnMintERC20_mint:test_SenderNotMinter_Reverts() (gas: 12706) -FactoryBurnMintERC20_supportsInterface:test_SupportsInterface_Success() (gas: 13517) -FactoryBurnMintERC20_transfer:test_InvalidAddress_Reverts() (gas: 11580) -FactoryBurnMintERC20_transfer:test_Transfer_Success() (gas: 45409) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 21590) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 21541) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 21554) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 51004) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroInput_Success() (gas: 13353) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 172660) -FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 176953) -FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 13390) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12229) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 61146) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 48844) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 13251) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 118275) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 14452) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 21466) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 13371) -FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 128178) -FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 132520) -FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 132589) -FeeQuoter_constructor:test_Setup_Success() (gas: 8090508) -FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 74951) -FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 34509) -FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 127564) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 21001) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 33926) -FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 78544) -FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 29615) -FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 121958) -FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 17419) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 118590) -FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 77364) -FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 39680) -FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 87958) -FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 49295) -FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 46734) -FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 39318) -FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 159836) -FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 25688) -FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 38968) -FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 39013) -FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 54048) -FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 40373) -FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 23381) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 129237) -FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 66547) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 301237) -FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 28152) -FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 38003) -FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 113239) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 247851) -FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 26901) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 193347) -FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 31192) -FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 84651) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 3278911) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 3278846) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 3258988) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 3278617) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 3278807) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 3278601) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 72539) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 72306) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 63583) -FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 3278175) -FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 67225) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 123975) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 15928) -FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 3276003) -FeeQuoter_onReport:test_OnReport_SkipPriceUpdateWhenStaleUpdateReceived() (gas: 62628) -FeeQuoter_onReport:test_onReport() (gas: 107453) -FeeQuoter_onReport:test_onReport_withKeystoneForwarderContract() (gas: 145095) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 24396) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 28541) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 25679) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 24574) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 25953) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 26492) -FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 26035) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 54276) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 22230) -FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 22737) -FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 20791) -FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 160061) -FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 50246) -FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 37897) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 36240) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 96867) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 36764) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 33820) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 22673) -FeeQuoter_supportsInterface:test_SupportsInterface_Success() (gas: 15694) -FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 13531) -FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 27676) -FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 32738) -FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 83756) -FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 165728) -FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 60630) -FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 80792) -FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 22392) -FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 109196) -FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 61207) -FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 13321) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 12222) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 5634878) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 12371) -FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 7857) -FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 7345) -HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 185581) -HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_transferLiquidity_Success() (gas: 177442) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_PrimaryMechanism_Success() (gas: 150310) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_WhileMigrationPause_Revert() (gas: 116337) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_Success() (gas: 156741) -HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233944) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 231051) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 119005) -HybridLockReleaseUSDCTokenPool_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 322291) -LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 5465214) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 32954) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 90891) -LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 63723) -LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 5461041) -LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 12683) -LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 79601) -LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 59982) -LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 271456) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11674) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 19808) -LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 11569) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 88557) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 59902) -LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 64808) -LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 12647) -MerkleMultiProofTest:test_CVE_2023_34459() (gas: 6328) -MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3975) -MerkleMultiProofTest:test_MerkleRoot256() (gas: 668330) -MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 4074) -MerkleMultiProofTest:test_SpecSync_gas() (gas: 49316) -MockRouterTest:test_ccipSendWithEVMExtraArgsV1_Success() (gas: 115223) -MockRouterTest:test_ccipSendWithEVMExtraArgsV2_Success() (gas: 138239) -MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 37132) -MockRouterTest:test_ccipSendWithInvalidEVMExtraArgs_Revert() (gas: 110461) -MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 64056) -MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 135393) -MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 68163) -MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 48451) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 19404) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 19475) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 19441) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DisableConfigRateNonZero_Revert() (gas: 19436) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 150980) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 358370) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 20152) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 85633) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 85559) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 49629) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 68143) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 19539) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 13335) -MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 3299920) -MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 3417369) -MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 38652) -MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 63893) -MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 18526) -MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 20926) -MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 25677) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 17951) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 243061) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 68524) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 21012) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 53971) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 56680) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 108834) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 345727) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 60275) -MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 63560) -MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 21607) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 18167) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 240851) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 69317) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 54784) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 57494) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 105910) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 343854) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 61068) -MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11628) -MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 20509) -MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 11127) -MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 25699) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 293683) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 266617) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 215556) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 32610) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_AbiEncoded_Revert() (gas: 16724) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 21127) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 20889) -MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 72030) -MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 49210) -MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 115906) -MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 23222) -MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 296834) -MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 437371) -MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 557004) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 719712) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 874850) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 486337) -MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 13309) -MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2266813) -MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 152947) -MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 841182) -MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 312066) -MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 261350) -MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 266606) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 930580) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 516817) -MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 49190) -MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 55807) -MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 86384) -MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 74818) -MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 38090) -MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 91440) -MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 39586) -MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 52327) -MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 29676) -MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 20746) -MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 28786) -MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 69269) -MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 42295) -MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 37071) -NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 134793) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 51228) -NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 72529) -NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12873) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 218792) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 182633) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 224796) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 318802) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 272221) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 71664) -NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 40493) -NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 41857) -NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 27445) -NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 79896) -NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 123170) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 194174) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 245399) -NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 175541) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 9321703) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 652168) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 174727) -OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 18183) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 299843) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 177935) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 195433) -OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 15760) -OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 77848) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 17919) -OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 314502) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 223499) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 423551) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 366507) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 207443) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 237494) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 188069) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 703499) -OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 12131) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 108650) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 75722) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 83999) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 78044) -OffRamp_commit:test_InvalidRootRevert() (gas: 76559) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 10124039) -OffRamp_commit:test_NoConfig_Revert() (gas: 9697762) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 129838) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 145439) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 129770) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 422857) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 189039) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 162831) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 176148) -OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 177322) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 73407) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 279805) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 143427) -OffRamp_commit:test_Unhealthy_Revert() (gas: 72677) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 248984) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 62243) -OffRamp_constructor:test_Constructor_Success() (gas: 9661226) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 151485) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 114308) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 112110) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 177038) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 112112) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 112057) -OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 19284) -OffRamp_execute:test_LargeBatch_Success() (gas: 4757160) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 460616) -OffRamp_execute:test_MultipleReports_Success() (gas: 389562) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 10548003) -OffRamp_execute:test_NoConfig_Revert() (gas: 9754918) -OffRamp_execute:test_NonArray_Revert() (gas: 33661) -OffRamp_execute:test_SingleReport_Success() (gas: 208303) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 172164) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 10419963) -OffRamp_execute:test_ZeroReports_Revert() (gas: 18899) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 68697) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 25994) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 269294) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 109393) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 312178) -OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 37023) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 18190) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 585002) -OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 60371) -OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 42950) -OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 37447) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 221269) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 237104) -OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 52271) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 624403) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 296659) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 251603) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 270652) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 306789) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 167631) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 492910) -OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 71900) -OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 86457) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 719832) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 652563) -OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 35247) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 696760) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 696674) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 560308) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 172028) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 201533) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 5737068) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 148136) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 111806) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 127938) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 103927) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 207738) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 260054) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 37666) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 267495) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 38194) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 73034) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 741227) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 405900) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 3569174) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 199666) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 278769) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 279465) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 1023883) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 458228) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 47685) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 117845) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 44163) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 105712) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 96972) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 198950) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 74940) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 91066) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 201751) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 209570) -OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 12828) -OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 15498) -OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 52690) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 30656) -OffRamp_trialExecute:test_trialExecute() (gas: 321147) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 150643) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 163361) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 378214) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 322791) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 20254) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 80819) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 355512) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 80773) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 15108) -OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 4156644) -OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 102460) -OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 100366) -OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 105352) -OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 100419) -OnRamp_constructor:test_Constructor_Success() (gas: 4240371) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 134412) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 166362) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 165249) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 162480) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 165490) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 164531) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 158770) -OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 42724) -OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 159236) -OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 41356) -OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 40275) -OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 20626) -OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 44254) -OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 26222) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 248663) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 275830) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 167025) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 185687) -OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 6289182) -OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 26986) -OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 83046) -OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 43350) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 330143) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 139289) -OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 79814) -OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 114560) -OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 41748) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 169020) -OnRamp_getFee:test_Unhealthy_Revert() (gas: 19970) -OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 11166) -OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 41932) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 13226) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 15548) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 13280) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 13885) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 15615) -OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 65082) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 136079) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 202620) -PingPong_setOutOfOrderExecution:test_OutOfOrderExecution_Success() (gas: 21829) -PingPong_setPaused:test_Pausing_Success() (gas: 19036) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 180163) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 206337) -RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1141201) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 27408) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 11404) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 11832) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1155666) -RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 20941) -RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 11645) -RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 11193) -RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 34858) -RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 663743) -RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 19206) -RMNHome_setCandidate:test_setCandidate_success() (gas: 634730) -RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 35645) -RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 21662) -RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 16620) -RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 130187) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 27054) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 26920) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 29055) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 31068) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 370126) -RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 29313) -RMNRemote_constructor:test_constructor() (gas: 8917) -RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 156826) -RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 20234) -RMNRemote_curse:test_curse_success() (gas: 157303) -RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 76181) -RMNRemote_isBlessed:test_isBlessed() (gas: 23709) -RMNRemote_setConfig:test_setConfig_ZeroValueNotAllowed_revert() (gas: 44318) -RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 1114504) -RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 339630) -RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 91847) -RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 65053) -RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 53961) -RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 20126) -RMNRemote_uncurse:test_uncurse_success() (gas: 44231) -RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 14554) -RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 108335) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 105908) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 113138) -RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 384051) -RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 499682) -RMNRemote_verify_withConfigSet:test_verify_success() (gas: 97508) -RateLimiter_constructor:test_Constructor_Success() (gas: 22964) -RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 19839) -RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 28311) -RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 39405) -RateLimiter_consume:test_ConsumeTokens_Success() (gas: 21919) -RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 57402) -RateLimiter_consume:test_ConsumingMoreThanUint128_Revert() (gas: 19531) -RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 33020) -RateLimiter_consume:test_Refill_Success() (gas: 48170) -RateLimiter_consume:test_TokenMaxCapacityExceeded_Revert() (gas: 22450) -RateLimiter_consume:test_TokenRateLimitReached_Revert() (gas: 31168) -RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 49681) -RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 63750) -RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 48144) -RegistryModuleOwnerCustom_constructor:test_constructor_Revert() (gas: 36866) -RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Revert() (gas: 24071) -RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Success() (gas: 139023) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 22539) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 137363) -RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 22381) -RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 137204) -Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 12348578) -Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 65151) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 156308) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 266527) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 88028) -Router_ccipSend:test_InvalidMsgValue() (gas: 35938) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 83614) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 233815) -Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 75147) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 231681) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 255497) -Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 28638) -Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 48577) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 236158) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 166571) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 276725) -Router_constructor:test_Constructor_Success() (gas: 14582) -Router_getArmProxy:test_getArmProxy() (gas: 11284) -Router_getFee:test_GetFeeSupportedChain_Success() (gas: 65608) -Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 20945) -Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 11166) -Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 12896) -Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 21360) -Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 12754) -Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 603372) -Router_recoverTokens:test_RecoverTokens_Success() (gas: 59820) -Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 52528) -Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 183094) -Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 41682) -Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 28289) -Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 47700) -Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 11766) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 58611) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 50532) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 13827) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 70299) -TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 12680) -TokenAdminRegistry_getPool:test_getPool_Success() (gas: 18715) -TokenAdminRegistry_getPools:test_getPools_Success() (gas: 48227) -TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 113817) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 109448) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 17535) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 16768) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 123237) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 114205) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 123911) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 13783) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 58233) -TokenAdminRegistry_setPool:test_setPool_InvalidTokenPoolToken_Revert() (gas: 21992) -TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 20133) -TokenAdminRegistry_setPool:test_setPool_Success() (gas: 41047) -TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 35795) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 20198) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 54743) -TokenPoolFactory_constructor:test_constructor_Revert() (gas: 1664801) -TokenPoolFactory_createTokenPool:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 21590205) -TokenPoolFactory_createTokenPool:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 11006352) -TokenPoolFactory_createTokenPool:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 22775629) -TokenPoolFactory_createTokenPool:test_createTokenPool_RemoteTokenHasDifferentDecimals_Success() (gas: 22786244) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 23225227) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 10847802) -TokenPoolFactory_createTokenPool:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 10998039) -TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 4802376) -TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 13060) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 26767) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 189561) -TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 25808) -TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8811) -TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 28126) -TokenPoolWithAllowList_setRouter:test_ZeroAddressNotAllowed_Revert() (gas: 11226) -TokenPool_addRemotePool:test_NonExistentChain_Revert() (gas: 15347) -TokenPool_addRemotePool:test_PoolAlreadyAdded_Revert() (gas: 119828) -TokenPool_addRemotePool:test_ZeroLengthAddressNotAllowed_Revert() (gas: 14735) -TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 539852) -TokenPool_addRemotePool:test_addRemotePool_Success() (gas: 163132) -TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 492222) -TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 16194) -TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 12692) -TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 643871) -TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1115319) -TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 236415) -TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 155686) -TokenPool_constructor:test_constructor() (gas: 24865) -TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 4798372) -TokenPool_getRemotePool:test_getRemotePools() (gas: 342823) -TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 24111) -TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 253319) -TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 98072) -TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 23403) -TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 216953) -TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 52635) -TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 17471) -TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 10997) -TokenPool_removeRemotePool:test_InvalidRemotePoolForChain_Revert() (gas: 18967) -TokenPool_removeRemotePool:test_NonExistentChain_Revert() (gas: 15458) -TokenPool_removeRemotePool:test_removeRemotePool_Success() (gas: 201681) -TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 19534) -TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 17807) -TokenPool_setChainRateLimiterConfigs:test_MismatchedArrayLengths_Revert() (gas: 28186) -TokenPool_setChainRateLimiterConfigs:test_NonExistentChain_Revert() (gas: 22589) -TokenPool_setChainRateLimiterConfigs:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 19017) -TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11673) -TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 39566) -USDCBridgeMigrator_BurnLockedUSDC:test_PrimaryMechanism_Success() (gas: 150310) -USDCBridgeMigrator_BurnLockedUSDC:test_WhileMigrationPause_Revert() (gas: 116359) -USDCBridgeMigrator_BurnLockedUSDC:test_invalidPermissions_Revert() (gas: 41517) -USDCBridgeMigrator_BurnLockedUSDC:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) -USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_Success() (gas: 156741) -USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233891) -USDCBridgeMigrator_cancelMigrationProposal:test_cancelExistingCCTPMigrationProposal_Success() (gas: 59397) -USDCBridgeMigrator_cancelMigrationProposal:test_cannotCancelANonExistentMigrationProposal_Revert() (gas: 12892) -USDCBridgeMigrator_excludeTokensFromBurn:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 14686) -USDCBridgeMigrator_proposeMigration:test_ChainNotUsingLockRelease_Revert() (gas: 16609) -USDCBridgeMigrator_provideLiquidity:test_PrimaryMechanism_Success() (gas: 150332) -USDCBridgeMigrator_provideLiquidity:test_WhileMigrationPause_Revert() (gas: 116381) -USDCBridgeMigrator_provideLiquidity:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 15364) -USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 70208) -USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidity_AfterMigration_Revert() (gas: 341846) -USDCBridgeMigrator_provideLiquidity:test_invalidPermissions_Revert() (gas: 41561) -USDCBridgeMigrator_provideLiquidity:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) -USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_Success() (gas: 156763) -USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233908) -USDCBridgeMigrator_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 231051) -USDCBridgeMigrator_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 119005) -USDCBridgeMigrator_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 322291) -USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_destChain_Success() (gas: 170683) -USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 584661) -USDCBridgeMigrator_updateChainSelectorMechanism:test_PrimaryMechanism_Success() (gas: 150310) -USDCBridgeMigrator_updateChainSelectorMechanism:test_WhileMigrationPause_Revert() (gas: 116359) -USDCBridgeMigrator_updateChainSelectorMechanism:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 341576) -USDCBridgeMigrator_updateChainSelectorMechanism:test_invalidPermissions_Revert() (gas: 41495) -USDCBridgeMigrator_updateChainSelectorMechanism:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 336981) -USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_Success() (gas: 156741) -USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 233961) -USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 37856) -USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 39375) -USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 33446) -USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 146887) -USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 501297) -USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 321637) -USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 54234) -USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 107436) -USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 74526) -USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11941) -USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 11435) \ No newline at end of file +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 15753) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 99953) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 76182) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 99974) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 145007) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 80439) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 80604) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 96107) +EtherSenderReceiverTest_constructor:test_constructor() (gas: 17575) +EtherSenderReceiverTest_getFee:test_getFee() (gas: 27456) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20355) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 16682) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16615) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 25456) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 25373) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17969) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25328) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26348) +FactoryBurnMintERC20_approve:test_Approve_Success() (gas: 55819) +FactoryBurnMintERC20_approve:test_InvalidAddress_Reverts() (gas: 10703) +FactoryBurnMintERC20_burn:test_BasicBurn_Success() (gas: 172464) +FactoryBurnMintERC20_burn:test_BurnFromZeroAddress_Reverts() (gas: 47338) +FactoryBurnMintERC20_burn:test_ExceedsBalance_Reverts() (gas: 22005) +FactoryBurnMintERC20_burn:test_SenderNotBurner_Reverts() (gas: 13520) +FactoryBurnMintERC20_burnFrom:test_BurnFrom_Success() (gas: 58274) +FactoryBurnMintERC20_burnFrom:test_ExceedsBalance_Reverts() (gas: 36191) +FactoryBurnMintERC20_burnFrom:test_InsufficientAllowance_Reverts() (gas: 22113) +FactoryBurnMintERC20_burnFrom:test_SenderNotBurner_Reverts() (gas: 13487) +FactoryBurnMintERC20_burnFromAlias:test_BurnFrom_Success() (gas: 58248) +FactoryBurnMintERC20_burnFromAlias:test_ExceedsBalance_Reverts() (gas: 36155) +FactoryBurnMintERC20_burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 22068) +FactoryBurnMintERC20_burnFromAlias:test_SenderNotBurner_Reverts() (gas: 13442) +FactoryBurnMintERC20_constructor:test_Constructor_Success() (gas: 1450638) +FactoryBurnMintERC20_decreaseApproval:test_DecreaseApproval_Success() (gas: 31419) +FactoryBurnMintERC20_getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 12717) +FactoryBurnMintERC20_getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 23874) +FactoryBurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 121194) +FactoryBurnMintERC20_grantRole:test_GrantBurnAccess_Success() (gas: 53403) +FactoryBurnMintERC20_grantRole:test_GrantMany_Success() (gas: 961486) +FactoryBurnMintERC20_grantRole:test_GrantMintAccess_Success() (gas: 94165) +FactoryBurnMintERC20_increaseApproval:test_IncreaseApproval_Success() (gas: 44398) +FactoryBurnMintERC20_mint:test_BasicMint_Success() (gas: 149804) +FactoryBurnMintERC20_mint:test_MaxSupplyExceeded_Reverts() (gas: 50679) +FactoryBurnMintERC20_mint:test_SenderNotMinter_Reverts() (gas: 11405) +FactoryBurnMintERC20_supportsInterface:test_SupportsInterface_Success() (gas: 11538) +FactoryBurnMintERC20_transfer:test_InvalidAddress_Reverts() (gas: 10701) +FactoryBurnMintERC20_transfer:test_Transfer_Success() (gas: 42482) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16846) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16759) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16813) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41239) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroInput_Success() (gas: 12563) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140709) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162719) +FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12263) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11476) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54860) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45257) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12368) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 89062) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13346) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17435) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12349) +FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106632) +FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 110982) +FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111057) +FeeQuoter_constructor:test_Setup_Success() (gas: 5014619) +FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68416) +FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29300) +FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96433) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14857) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20988) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 73071) +FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26476) +FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 112065) +FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16184) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 109175) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 68059) +FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33529) +FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78516) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 37307) +FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 35086) +FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28176) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 96089) +FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20615) +FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27984) +FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 28029) +FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40822) +FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29736) +FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18465) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 83484) +FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53570) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239880) +FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22668) +FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29966) +FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100417) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 143562) +FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21280) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 115060) +FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 23495) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63981) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1897852) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1897810) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1877929) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1897584) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1897788) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1897600) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 65232) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 65112) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58894) +FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1897226) +FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61843) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116970) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 14182) +FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1895903) +FeeQuoter_onReport:test_OnReport_SkipPriceUpdateWhenStaleUpdateReceived() (gas: 52614) +FeeQuoter_onReport:test_onReport() (gas: 89071) +FeeQuoter_onReport:test_onReport_withKeystoneForwarderContract() (gas: 122700) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17381) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21553) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 18613) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18153) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18467) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18590) +FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 21476) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44974) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 20008) +FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20405) +FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17976) +FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 123405) +FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42236) +FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28702) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 30021) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 76515) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28300) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26159) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19595) +FeeQuoter_supportsInterface:test_SupportsInterface_Success() (gas: 13263) +FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12198) +FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23872) +FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28648) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74816) +FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145691) +FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52443) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 66423) +FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20124) +FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 93563) +FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 53142) +FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12431) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10710) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 4057945) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10906) +FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6841) +FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6567) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 176859) +HybridLockReleaseUSDCTokenPool_TransferLiquidity:test_transferLiquidity_Success() (gas: 167004) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_PrimaryMechanism_Success() (gas: 135878) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_WhileMigrationPause_Revert() (gas: 109718) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_Success() (gas: 146937) +HybridLockReleaseUSDCTokenPool_lockOrBurn:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209160) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 213127) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 109646) +HybridLockReleaseUSDCTokenPool_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 265910) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3209936) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 29734) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 80625) +LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59227) +LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3206264) +LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 11511) +LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 74100) +LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 54745) +LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 223256) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11003) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18182) +LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10250) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83328) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 56101) +LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60188) +LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11464) +MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5456) +MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3563) +MerkleMultiProofTest:test_MerkleRoot256() (gas: 394891) +MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 3661) +MerkleMultiProofTest:test_SpecSync_gas() (gas: 34152) +MockRouterTest:test_ccipSendWithEVMExtraArgsV1_Success() (gas: 110095) +MockRouterTest:test_ccipSendWithEVMExtraArgsV2_Success() (gas: 132614) +MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 34059) +MockRouterTest:test_ccipSendWithInvalidEVMExtraArgs_Revert() (gas: 106706) +MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60864) +MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126741) +MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63499) +MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44070) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 16554) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 16634) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 16585) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DisableConfigRateNonZero_Revert() (gas: 16571) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigsBothLanes_Success() (gas: 133973) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Success() (gas: 316663) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 17490) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 76620) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 76603) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 38739) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53937) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 17154) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 12481) +MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1977286) +MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2093583) +MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 30794) +MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 48169) +MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15907) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17624) +MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21652) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14636) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210637) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58473) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17791) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45202) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46514) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76999) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 309039) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50680) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51331) +MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19375) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15914) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210357) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60266) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 47025) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48305) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 78006) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308985) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52450) +MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 10967) +MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19190) +MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10642) +MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 18518) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 281000) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 255391) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 205169) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 29012) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_AbiEncoded_Revert() (gas: 14001) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18365) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18294) +MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59441) +MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44190) +MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 104844) +MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 18908) +MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283842) +MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422489) +MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 512288) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 680609) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 829200) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 457530) +MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12436) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2142528) +MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141905) +MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807791) +MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158911) +MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 112357) +MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254293) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 861787) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 476186) +MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 42765) +MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 48348) +MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 76893) +MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 65621) +MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 33387) +MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 79597) +MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 33589) +MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 47082) +MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 25583) +MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 18615) +MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24193) +MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 60994) +MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39824) +MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32920) +NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123604) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45986) +NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889) +NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12169) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 185881) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 153036) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 189356) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 252504) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 220732) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60520) +NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37979) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38756) +NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce_SkippedIncorrectNonce() (gas: 23759) +NonceManager_getIncrementedOutboundNonce:test_incrementNoncesInboundAndOutbound() (gas: 71901) +NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105300) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166146) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 195937) +NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 140158) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5909973) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626094) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166505) +OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16719) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 274389) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168604) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181037) +OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13441) +OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72724) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) +OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 284695) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177651) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333753) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277019) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168589) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188293) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 156587) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 545791) +OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10643) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92450) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63117) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 69655) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 65803) +OffRamp_commit:test_InvalidRootRevert() (gas: 64898) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670763) +OffRamp_commit:test_NoConfig_Revert() (gas: 6254181) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112728) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 120561) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112660) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 354785) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 163983) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 140923) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 147631) +OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 153596) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 61365) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 231709) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125027) +OffRamp_commit:test_Unhealthy_Revert() (gas: 60177) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206221) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53305) +OffRamp_constructor:test_Constructor_Success() (gas: 6216958) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137127) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103837) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101686) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162609) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101606) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101607) +OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17532) +OffRamp_execute:test_LargeBatch_Success() (gas: 3380247) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371269) +OffRamp_execute:test_MultipleReports_Success() (gas: 298986) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079301) +OffRamp_execute:test_NoConfig_Revert() (gas: 6303771) +OffRamp_execute:test_NonArray_Revert() (gas: 27572) +OffRamp_execute:test_SingleReport_Success() (gas: 175691) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147850) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6970909) +OffRamp_execute:test_ZeroReports_Revert() (gas: 17248) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56273) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 238250) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 92054) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 268403) +OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28659) +OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 15530) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 474978) +OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48296) +OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 34101) +OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28824) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187737) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197869) +OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40687) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 405083) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248906) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192550) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212576) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243719) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141570) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 402802) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58242) +OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73812) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 574696) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 523247) +OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 26795) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 541323) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 541270) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 452360) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135291) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164952) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3905742) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 121048) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89737) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81694) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74284) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172699) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 213371) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27248) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 165935) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27774) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55362) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 489789) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 315041) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2224914) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165390) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226281) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226821) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 775319) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344966) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37652) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101525) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36850) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91490) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 83578) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 168992) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 62882) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 78486) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 170862) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 182101) +OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11465) +OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13975) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47491) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25464) +OffRamp_trialExecute:test_trialExecute() (gas: 272039) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127605) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138915) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289680) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251893) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67101) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 325983) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65892) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 12902) +OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2569362) +OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95148) +OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93090) +OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98066) +OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93146) +OnRamp_constructor:test_Constructor_Success() (gas: 2647459) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115432) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146300) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145875) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144080) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146072) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145470) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140731) +OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38526) +OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143112) +OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36611) +OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36493) +OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18290) +OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38412) +OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23629) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186715) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 213144) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147070) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161303) +OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 4073863) +OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24015) +OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75854) +OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38588) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 281529) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 99028) +OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65475) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87287) +OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35166) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 114201) +OnRamp_getFee:test_Unhealthy_Revert() (gas: 17040) +OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) +OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35405) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11535) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 13194) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 11499) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 11938) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13264) +OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56440) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 125901) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172964) +PingPong_setOutOfOrderExecution:test_OutOfOrderExecution_Success() (gas: 20283) +PingPong_setPaused:test_Pausing_Success() (gas: 17738) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 152077) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 177692) +RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1079685) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23879) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 10597) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 10843) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1085033) +RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19041) +RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 10889) +RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 10628) +RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 28147) +RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 597564) +RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 15071) +RMNHome_setCandidate:test_setCandidate_success() (gas: 589330) +RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 30186) +RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 18854) +RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14009) +RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 104862) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18850) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18710) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20387) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 21405) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137318) +RMNHome_validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20522) +RMNRemote_constructor:test_constructor() (gas: 8398) +RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154501) +RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18734) +RMNRemote_curse:test_curse_success() (gas: 149475) +RMNRemote_global_curses:test_isCursed_globalCurseSubject() (gas: 71715) +RMNRemote_isBlessed:test_isBlessed() (gas: 17588) +RMNRemote_setConfig:test_setConfig_ZeroValueNotAllowed_revert() (gas: 37971) +RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 993448) +RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323540) +RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80201) +RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 54232) +RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51940) +RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18615) +RMNRemote_uncurse:test_uncurse_success() (gas: 40135) +RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13600) +RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 96471) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 94289) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 101352) +RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 304744) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 428284) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 86181) +RateLimiter_constructor:test_Constructor_Success() (gas: 19806) +RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 16042) +RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 22435) +RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 31495) +RateLimiter_consume:test_ConsumeTokens_Success() (gas: 20403) +RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 40693) +RateLimiter_consume:test_ConsumingMoreThanUint128_Revert() (gas: 15800) +RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 25781) +RateLimiter_consume:test_Refill_Success() (gas: 37447) +RateLimiter_consume:test_TokenMaxCapacityExceeded_Revert() (gas: 18388) +RateLimiter_consume:test_TokenRateLimitReached_Revert() (gas: 24930) +RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 38947) +RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 46852) +RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 38509) +RegistryModuleOwnerCustom_constructor:test_constructor_Revert() (gas: 36107) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Revert() (gas: 20200) +RegistryModuleOwnerCustom_registerAccessControlDefaultAdmin:test_registerAccessControlDefaultAdmin_Success() (gas: 130631) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 19797) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 130126) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 19602) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 129930) +Router_applyRampUpdates:test_applyRampUpdates_OffRampUpdatesWithRouting() (gas: 10749731) +Router_applyRampUpdates:test_applyRampUpdates_OnRampDisable() (gas: 56422) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131531) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 221794) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71942) +Router_ccipSend:test_InvalidMsgValue() (gas: 32411) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69608) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 193486) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61634) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 192090) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226667) +Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 25056) +Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 45056) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 194399) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140780) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230978) +Router_constructor:test_Constructor_Success() (gas: 13222) +Router_getArmProxy:test_getArmProxy() (gas: 10573) +Router_getFee:test_GetFeeSupportedChain_Success() (gas: 52018) +Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17385) +Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) +Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11410) +Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 20199) +Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 11236) +Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 349502) +Router_recoverTokens:test_RecoverTokens_Success() (gas: 52667) +Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 43213) +Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 159418) +Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 35723) +Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 25376) +Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 44812) +Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 11030) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51433) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 44189) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 12662) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 67155) +TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 11395) +TokenAdminRegistry_getPool:test_getPool_Success() (gas: 17701) +TokenAdminRegistry_getPools:test_getPools_Success() (gas: 40331) +TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 106315) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 104412) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 15643) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 15177) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 113094) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 108031) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 116216) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 12651) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 54735) +TokenAdminRegistry_setPool:test_setPool_InvalidTokenPoolToken_Revert() (gas: 19316) +TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 18170) +TokenAdminRegistry_setPool:test_setPool_Success() (gas: 36267) +TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30875) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18202) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49592) +TokenPoolFactory_constructor:test_constructor_Revert() (gas: 1121653) +TokenPoolFactory_createTokenPool:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 12612969) +TokenPoolFactory_createTokenPool:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 6513874) +TokenPoolFactory_createTokenPool:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 13434268) +TokenPoolFactory_createTokenPool:test_createTokenPool_RemoteTokenHasDifferentDecimals_Success() (gas: 13441570) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 13771048) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 6301066) +TokenPoolFactory_createTokenPool:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 6510314) +TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 2827849) +TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12119) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23567) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 178398) +TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 23929) +TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8408) +TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 25005) +TokenPoolWithAllowList_setRouter:test_ZeroAddressNotAllowed_Revert() (gas: 10729) +TokenPool_addRemotePool:test_NonExistentChain_Revert() (gas: 14222) +TokenPool_addRemotePool:test_PoolAlreadyAdded_Revert() (gas: 117205) +TokenPool_addRemotePool:test_ZeroLengthAddressNotAllowed_Revert() (gas: 14014) +TokenPool_addRemotePool:test_addRemotePool_MultipleActive() (gas: 472820) +TokenPool_addRemotePool:test_addRemotePool_Success() (gas: 157095) +TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 455575) +TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 15032) +TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 11863) +TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 592089) +TokenPool_applyChainUpdates:test_applyChainUpdates_UpdatesRemotePoolHashes() (gas: 1077776) +TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 226472) +TokenPool_calculateLocalAmount:test_calculateLocalAmount() (gas: 93680) +TokenPool_constructor:test_constructor() (gas: 21930) +TokenPool_constructor:test_constructor_DecimalCallFails() (gas: 2824157) +TokenPool_getRemotePool:test_getRemotePools() (gas: 330500) +TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 21504) +TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 240435) +TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 94291) +TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 21156) +TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 204376) +TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 49238) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 14020) +TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 9727) +TokenPool_removeRemotePool:test_InvalidRemotePoolForChain_Revert() (gas: 17499) +TokenPool_removeRemotePool:test_NonExistentChain_Revert() (gas: 14344) +TokenPool_removeRemotePool:test_removeRemotePool_Success() (gas: 188387) +TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 17214) +TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 15307) +TokenPool_setChainRateLimiterConfigs:test_MismatchedArrayLengths_Revert() (gas: 23960) +TokenPool_setChainRateLimiterConfigs:test_NonExistentChain_Revert() (gas: 19424) +TokenPool_setChainRateLimiterConfigs:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 16511) +TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11002) +TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 37606) +USDCBridgeMigrator_BurnLockedUSDC:test_PrimaryMechanism_Success() (gas: 135887) +USDCBridgeMigrator_BurnLockedUSDC:test_WhileMigrationPause_Revert() (gas: 109751) +USDCBridgeMigrator_BurnLockedUSDC:test_invalidPermissions_Revert() (gas: 39493) +USDCBridgeMigrator_BurnLockedUSDC:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 309833) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_Success() (gas: 146961) +USDCBridgeMigrator_BurnLockedUSDC:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209124) +USDCBridgeMigrator_cancelMigrationProposal:test_cancelExistingCCTPMigrationProposal_Success() (gas: 56155) +USDCBridgeMigrator_cancelMigrationProposal:test_cannotCancelANonExistentMigrationProposal_Revert() (gas: 12669) +USDCBridgeMigrator_excludeTokensFromBurn:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 13579) +USDCBridgeMigrator_proposeMigration:test_ChainNotUsingLockRelease_Revert() (gas: 15765) +USDCBridgeMigrator_provideLiquidity:test_PrimaryMechanism_Success() (gas: 136004) +USDCBridgeMigrator_provideLiquidity:test_WhileMigrationPause_Revert() (gas: 109893) +USDCBridgeMigrator_provideLiquidity:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 13390) +USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 67428) +USDCBridgeMigrator_provideLiquidity:test_cannotProvideLiquidity_AfterMigration_Revert() (gas: 313933) +USDCBridgeMigrator_provideLiquidity:test_invalidPermissions_Revert() (gas: 39493) +USDCBridgeMigrator_provideLiquidity:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 310092) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_Success() (gas: 147102) +USDCBridgeMigrator_provideLiquidity:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209430) +USDCBridgeMigrator_releaseOrMint:test_OnLockReleaseMechanism_Success() (gas: 213160) +USDCBridgeMigrator_releaseOrMint:test_WhileMigrationPause_Revert() (gas: 109679) +USDCBridgeMigrator_releaseOrMint:test_incomingMessageWithPrimaryMechanism() (gas: 265963) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_destChain_Success() (gas: 150538) +USDCBridgeMigrator_releaseOrMint:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 511783) +USDCBridgeMigrator_updateChainSelectorMechanism:test_PrimaryMechanism_Success() (gas: 136021) +USDCBridgeMigrator_updateChainSelectorMechanism:test_WhileMigrationPause_Revert() (gas: 109871) +USDCBridgeMigrator_updateChainSelectorMechanism:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 313532) +USDCBridgeMigrator_updateChainSelectorMechanism:test_invalidPermissions_Revert() (gas: 39471) +USDCBridgeMigrator_updateChainSelectorMechanism:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 310092) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_Success() (gas: 147057) +USDCBridgeMigrator_updateChainSelectorMechanism:test_onLockReleaseMechanism_thenSwitchToPrimary_Success() (gas: 209483) +USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 26049) +USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35319) +USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 29897) +USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133426) +USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 433430) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 265695) +USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 47231) +USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 95262) +USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66437) +USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11314) +USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10107) \ No newline at end of file From 477f94c71d369c0046e461b09639a3f7f898752d Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 17 Dec 2024 14:39:26 -0500 Subject: [PATCH 07/15] formatting --- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 4e8f4724d89..d16e021bdc7 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -13,7 +13,6 @@ import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {CallWithExactGas} from "../../shared/call/CallWithExactGas.sol"; import {Client} from "../libraries/Client.sol"; - import {ERC165Checker} from "../libraries/ERC165Checker.sol"; import {Internal} from "../libraries/Internal.sol"; import {MerkleMultiProof} from "../libraries/MerkleMultiProof.sol"; From c6dec415169c10f31c2924d386fb66560955f112 Mon Sep 17 00:00:00 2001 From: Josh Date: Wed, 18 Dec 2024 14:05:35 -0500 Subject: [PATCH 08/15] change name for specificity and update tests, and change gas check to assembl --- contracts/gas-snapshots/ccip.gas-snapshot | 41 +++++----- ...Checker.sol => ERC165CheckerReverting.sol} | 49 +++++++----- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 8 +- .../ccip/test/libraries/ERC165Checker.t.sol | 79 ------------------- ...ting.getSupportedInterfacesReverting.t.sol | 21 +++++ ...rting.supportsAllInterfacesReverting.t.sol | 52 ++++++++++++ ...Reverting.supportsInterfaceReverting.t.sol | 71 +++++++++++++++++ .../ERC165CheckerRevertingSetup.t.sol | 17 ++++ 8 files changed, 217 insertions(+), 121 deletions(-) rename contracts/src/v0.8/ccip/libraries/{ERC165Checker.sol => ERC165CheckerReverting.sol} (69%) delete mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol create mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol create mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol create mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol create mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 0bdf235593f..a4233ce2bb5 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -69,11 +69,16 @@ CCIPHome_supportsInterface:test_supportsInterface_success() (gas: 9885) DefensiveExampleTest:test_HappyPath_Success() (gas: 200540) DefensiveExampleTest:test_Recovery() (gas: 425013) E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1513205) -ERC165CheckerTest:test__getSupportedInterfaces() (gas: 11506) -ERC165CheckerTest:test__supportsAllInterfaces() (gas: 10813) -ERC165CheckerTest:test__supportsAllInterfaces_notAllSupported() (gas: 11848) -ERC165CheckerTest:test__supportsAllInterfaces_notSupportsERC165() (gas: 6505) -ERC165CheckerTest:test__supportsInterface() (gas: 10499) +ERC165CheckerReverting_getSupportedInterfaces:test__getSupportedInterfacesReverting() (gas: 11479) +ERC165CheckerReverting_supportsInterfaceReverting:test__getSupportedInterfacesReverting() (gas: 11490) +ERC165CheckerReverting_supportsInterfaceReverting:test__getSupportedInterfacesReverting() (gas: 11511) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting() (gas: 10828) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting() (gas: 10839) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notAllSupported() (gas: 11882) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notAllSupported() (gas: 11882) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notSupportsERC165() (gas: 6494) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notSupportsERC165() (gas: 6494) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10463) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) @@ -370,7 +375,7 @@ NonceManager_getOutboundNonce:test_getOutboundNonce_Upgrade() (gas: 105300) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceNewSenderStartsAtZero() (gas: 166146) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeNonceStartsAtV1Nonce() (gas: 195937) NonceManager_getOutboundNonce:test_getOutboundNonce_UpgradeSenderNoncesReadsPreviousRamp() (gas: 140158) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5909973) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5908363) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626094) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166505) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16719) @@ -394,8 +399,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63117) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 69655) OffRamp_commit:test_InvalidInterval_Revert() (gas: 65803) OffRamp_commit:test_InvalidRootRevert() (gas: 64898) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6670763) -OffRamp_commit:test_NoConfig_Revert() (gas: 6254181) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6669153) +OffRamp_commit:test_NoConfig_Revert() (gas: 6252571) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112728) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 120561) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112660) @@ -410,23 +415,23 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125027) OffRamp_commit:test_Unhealthy_Revert() (gas: 60177) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206221) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53305) -OffRamp_constructor:test_Constructor_Success() (gas: 6216958) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137127) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103837) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101686) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162609) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101606) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101607) +OffRamp_constructor:test_Constructor_Success() (gas: 6215348) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137118) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103828) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101677) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162599) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101597) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101598) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17532) OffRamp_execute:test_LargeBatch_Success() (gas: 3380247) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371269) OffRamp_execute:test_MultipleReports_Success() (gas: 298986) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079301) -OffRamp_execute:test_NoConfig_Revert() (gas: 6303771) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7077691) +OffRamp_execute:test_NoConfig_Revert() (gas: 6302161) OffRamp_execute:test_NonArray_Revert() (gas: 27572) OffRamp_execute:test_SingleReport_Success() (gas: 175691) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147850) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6970909) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6969299) OffRamp_execute:test_ZeroReports_Revert() (gas: 17248) OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56273) OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) diff --git a/contracts/src/v0.8/ccip/libraries/ERC165Checker.sol b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol similarity index 69% rename from contracts/src/v0.8/ccip/libraries/ERC165Checker.sol rename to contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol index 2baae61825d..11f8f8d5885 100644 --- a/contracts/src/v0.8/ccip/libraries/ERC165Checker.sol +++ b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol @@ -12,24 +12,25 @@ import {IERC165} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/utils * what to do in these cases. * * Note this is exactly the same as the OZ version, with the exception that external calls will revert - * if < 30_000 gas is available, to prevent message delivery issues in CCIP. + * if < 31_000 gas is available, to prevent message delivery issues in CCIP. */ -library ERC165Checker { +library ERC165CheckerReverting { // As per the EIP-165 spec, no interface should ever match 0xffffffff bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff; - error NotEnoughGasForSupportsInterfaceCall(); + // bytes4(keccak256("NotEnoughGasForSupportsInterfaceCall()")) + bytes4 private constant NOT_ENOUGH_GAS_SIG = 0x161c3bf7; /** * @dev Returns true if `account` supports the {IERC165} interface. */ - function _supportsERC165( + function _supportsERC165Reverting( address account ) internal view returns (bool) { // Any contract that implements ERC165 must explicitly indicate support of // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid - return _supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) - && !_supportsERC165InterfaceUnchecked(account, _INTERFACE_ID_INVALID); + return _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId) + && !_supportsERC165InterfaceUncheckedReverting(account, _INTERFACE_ID_INVALID); } /** @@ -38,9 +39,9 @@ library ERC165Checker { * * See {IERC165-supportsInterface}. */ - function _supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { + function _supportsInterfaceReverting(address account, bytes4 interfaceId) internal view returns (bool) { // query support of both ERC165 as per the spec and support of _interfaceId - return _supportsERC165(account) && _supportsERC165InterfaceUnchecked(account, interfaceId); + return _supportsERC165Reverting(account) && _supportsERC165InterfaceUncheckedReverting(account, interfaceId); } /** @@ -53,15 +54,18 @@ library ERC165Checker { * * _Available since v3.4._ */ - function _getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) { + function _getSupportedInterfacesReverting( + address account, + bytes4[] memory interfaceIds + ) internal view returns (bool[] memory) { // an array of booleans corresponding to interfaceIds and whether they're supported or not bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); // query support of ERC165 itself - if (_supportsERC165(account)) { + if (_supportsERC165Reverting(account)) { // query support of each interface in interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { - interfaceIdsSupported[i] = _supportsERC165InterfaceUnchecked(account, interfaceIds[i]); + interfaceIdsSupported[i] = _supportsERC165InterfaceUncheckedReverting(account, interfaceIds[i]); } } @@ -77,15 +81,15 @@ library ERC165Checker { * * See {IERC165-supportsInterface}. */ - function _supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) { + function _supportsAllInterfacesReverting(address account, bytes4[] memory interfaceIds) internal view returns (bool) { // query support of ERC165 itself - if (!_supportsERC165(account)) { + if (!_supportsERC165Reverting(account)) { return false; } // query support of each interface in interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { - if (!_supportsERC165InterfaceUnchecked(account, interfaceIds[i])) { + if (!_supportsERC165InterfaceUncheckedReverting(account, interfaceIds[i])) { return false; } } @@ -109,7 +113,7 @@ library ERC165Checker { * * Interface identification is specified in ERC-165. */ - function _supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) { + function _supportsERC165InterfaceUncheckedReverting(address account, bytes4 interfaceId) internal view returns (bool) { // prepare call bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); @@ -118,16 +122,21 @@ library ERC165Checker { uint256 returnSize; uint256 returnValue; - // Enforce that there's enough gas avilable so that the call will not fail due to OOG error. Without this - // supportsInterface() may return false when it should return true. - if (gasleft() < 30_000) revert NotEnoughGasForSupportsInterfaceCall(); - assembly { + // Enforce that there's enough gas avilable so that the call will not fail due to OOG error. Without this supportsInterface() may return false when it should return true. + + // 32,000 gas was chosen to ensure enough gas to invoke the staticcall after the check + // without breaking the 63/64 rule. Under EIP-150 there must be at least ~30,476 gas + // remaining before the staticcall. + if lt(gas(), 32000) { + mstore(0x0, NOT_ENOUGH_GAS_SIG) + revert(0x0, 0x4) + } + success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20) returnSize := returndatasize() returnValue := mload(0x00) } - return success && returnSize >= 0x20 && returnValue > 0; } } diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index d16e021bdc7..db4ace2f436 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -13,7 +13,7 @@ import {ITokenAdminRegistry} from "../interfaces/ITokenAdminRegistry.sol"; import {CallWithExactGas} from "../../shared/call/CallWithExactGas.sol"; import {Client} from "../libraries/Client.sol"; -import {ERC165Checker} from "../libraries/ERC165Checker.sol"; +import {ERC165CheckerReverting} from "../libraries/ERC165CheckerReverting.sol"; import {Internal} from "../libraries/Internal.sol"; import {MerkleMultiProof} from "../libraries/MerkleMultiProof.sol"; import {Pool} from "../libraries/Pool.sol"; @@ -28,7 +28,7 @@ import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts /// @dev MultiOCR3Base is used to store multiple OCR configs for the OffRamp. The execution plugin type has to be /// configured without signature verification, and the commit plugin type with verification. contract OffRamp is ITypeAndVersion, MultiOCR3Base { - using ERC165Checker for address; + using ERC165CheckerReverting for address; using EnumerableSet for EnumerableSet.UintSet; error ZeroChainSelectorNotAllowed(); @@ -609,7 +609,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // which checks for sufficient gas before making the external call. if ( (message.data.length == 0 && message.gasLimit == 0) || message.receiver.code.length == 0 - || !message.receiver._supportsInterface(type(IAny2EVMMessageReceiver).interfaceId) + || !message.receiver._supportsInterfaceReverting(type(IAny2EVMMessageReceiver).interfaceId) ) return; (bool success, bytes memory returnData,) = s_sourceChainConfigs[message.header.sourceChainSelector] @@ -650,7 +650,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // This is done to prevent a pool from reverting the entire transaction if it doesn't support the interface. // The call gets a max or 30k gas per instance, of which there are three. This means offchain gas estimations should // account for 90k gas overhead due to the interface check. - if (localPoolAddress == address(0) || !localPoolAddress._supportsInterface(Pool.CCIP_POOL_V1)) { + if (localPoolAddress == address(0) || !localPoolAddress._supportsInterfaceReverting(Pool.CCIP_POOL_V1)) { revert NotACompatiblePool(localPoolAddress); } diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol deleted file mode 100644 index 6ea4aeb4ce4..00000000000 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165Checker.t.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; - -import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver.sol"; - -import {ERC165Checker} from "../../libraries/ERC165Checker.sol"; -import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol"; - -import {Test} from "forge-std/Test.sol"; - -contract ERC165CheckerTest is Test { - using ERC165Checker for address; - - address internal s_receiver; - - bytes4 public constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; - - constructor() { - s_receiver = address(new MaybeRevertMessageReceiver(false)); - } - - function test__supportsInterface() public view { - assertTrue(s_receiver._supportsInterface(type(IAny2EVMMessageReceiver).interfaceId)); - } - - function test__getSupportedInterfaces() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - bool[] memory supportedIds = s_receiver._getSupportedInterfaces(interfaceIds); - assertTrue(supportedIds[0]); - assertEq(interfaceIds.length, supportedIds.length); - } - - function test__supportsAllInterfaces() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - assertTrue(s_receiver._supportsAllInterfaces(interfaceIds)); - } - - function test__supportsAllInterfaces_notAllSupported() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - assertFalse(s_receiver._supportsAllInterfaces(interfaceIds)); - } - - function test__supportsAllInterfaces_notSupportsERC165() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - // An address that does not support ERC165 - address randomAddress = address(0xdead); - - assertFalse(randomAddress._supportsAllInterfaces(interfaceIds)); - } - - function test_supportsInterface_RevertWhen_NotEnoughGasForSupportsInterface() public { - vm.expectRevert(ERC165Checker.NotEnoughGasForSupportsInterfaceCall.selector); - - // Library calls cannot be called with gas limit overrides, so a public function must be exposed - // instead which can proxy the call to the library. - - // The gas limit was chosen so that after overhead, <30k would remain to trigger the error. - this.invokeERC165Checker{gas: 35_000}(); - } - - // Meant to test the call with a manual gas limit override - function invokeERC165Checker() external view { - s_receiver._supportsInterface(EXAMPLE_INTERFACE_ID); - } -} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol new file mode 100644 index 00000000000..aa3b81b20be --- /dev/null +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; + +import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; +import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; + +contract ERC165CheckerReverting_getSupportedInterfaces is ERC165CheckerRevertingSetup { + using ERC165CheckerReverting for address; + + function test__getSupportedInterfacesReverting() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); + assertTrue(supportedIds[0]); + assertEq(interfaceIds.length, supportedIds.length); + } +} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol new file mode 100644 index 00000000000..d443ebfccb8 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; + +import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; +import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; + +contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRevertingSetup { + using ERC165CheckerReverting for address; + + function test__getSupportedInterfacesReverting() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); + assertTrue(supportedIds[0]); + assertEq(interfaceIds.length, supportedIds.length); + } + + function test__supportsAllInterfacesReverting() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + assertTrue(s_receiver._supportsAllInterfacesReverting(interfaceIds)); + } + + function test__supportsAllInterfacesReverting_notAllSupported() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + assertFalse(s_receiver._supportsAllInterfacesReverting(interfaceIds)); + } + + // Reverts + + function test__supportsAllInterfacesReverting_notSupportsERC165() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + // An address that does not support ERC165 + address randomAddress = address(0xdead); + + assertFalse(randomAddress._supportsAllInterfacesReverting(interfaceIds)); + } +} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol new file mode 100644 index 00000000000..15deaddd636 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; + +import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; +import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; + +contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRevertingSetup { + using ERC165CheckerReverting for address; + + function test__supportsInterfaceReverting() public view { + assertTrue(s_receiver._supportsInterfaceReverting(type(IAny2EVMMessageReceiver).interfaceId)); + } + + function test__getSupportedInterfacesReverting() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); + assertTrue(supportedIds[0]); + assertEq(interfaceIds.length, supportedIds.length); + } + + function test__supportsAllInterfacesReverting() public view { + bytes4[] memory interfaceIds = new bytes4[](1); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + + assertTrue(s_receiver._supportsAllInterfacesReverting(interfaceIds)); + } + + function test__supportsAllInterfacesReverting_notAllSupported() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + assertFalse(s_receiver._supportsAllInterfacesReverting(interfaceIds)); + } + + // Reverts + + function test__supportsAllInterfacesReverting_notSupportsERC165() public view { + bytes4[] memory interfaceIds = new bytes4[](2); + + interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; + interfaceIds[1] = EXAMPLE_INTERFACE_ID; + + // An address that does not support ERC165 + address randomAddress = address(0xdead); + + assertFalse(randomAddress._supportsAllInterfacesReverting(interfaceIds)); + } + + function test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() public { + vm.expectRevert(NOT_ENOUGH_GAS_SIG); + + // Library calls cannot be called with gas limit overrides, so a public function must be exposed + // instead which can proxy the call to the library. + + // The gas limit was chosen so that after overhead, <30k would remain to trigger the error. + this.invokeERC165Checker{gas: 35_000}(); + } + + // Meant to test the call with a manual gas limit override + function invokeERC165Checker() external view { + s_receiver._supportsInterfaceReverting(EXAMPLE_INTERFACE_ID); + } +} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol new file mode 100644 index 00000000000..1a46c602f52 --- /dev/null +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.24; + +import {MaybeRevertMessageReceiver} from "../../helpers/receivers/MaybeRevertMessageReceiver.sol"; + +import {Test} from "forge-std/Test.sol"; + +contract ERC165CheckerRevertingSetup is Test { + address internal s_receiver; + + bytes4 internal constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; + bytes4 internal constant NOT_ENOUGH_GAS_SIG = 0x161c3bf7; + + constructor() { + s_receiver = address(new MaybeRevertMessageReceiver(false)); + } +} From 633fe8c1afc29da9c460f8dbdbcb10bf94c4f267 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:12:01 +0000 Subject: [PATCH 09/15] Update gethwrappers --- core/gethwrappers/ccip/generated/offramp/offramp.go | 4 ++-- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index ccafb721166..0ddf31f4141 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -156,8 +156,8 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughGasForSupportsInterfaceCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d2738038062006d27833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fac62000d7b600039600081816101b001528181610ce801528181612ed1015261382c0152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fac6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613ed0565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd919061403e565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614098565b61035361034e366004614139565b6107c6565b6040516102bd9190614196565b61014461036e3660046146ff565b61081b565b61014461038136600461498e565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a22565b610e0d565b61014461012c366004614a87565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614ad2565b610e1e565b6040516102bd9190614b32565b6104dd6104b5366004614ba7565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c23565b610f7c565b61051161050c366004614cd5565b61147f565b6040516102bd9190614cf0565b61014461052c366004614d03565b61158b565b61014461053f366004614d20565b61159c565b610144610552366004614ddb565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613cf0565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613cf0565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f18565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f18565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f2e565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f18565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f7e565b60026107e1608085614fa7565b6001600160401b03166107f49190614fcd565b6107fe8585611913565b901c1660038111156108125761081261416c565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f18565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f18565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f18565b60200260200101516000015190506000856020015183815181106108fd576108fd614f18565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f18565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f18565b60200260200101516020015182815181106109f6576109f6614f18565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f18565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb908590600401615091565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d919061403e565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f000000000000000000000000000000000000000000000000000000000000000092916004016150a4565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150e0565b509150915081610d7d57806040516302a35ba360e21b815260040161094d919061403e565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a8789018961538d565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155b5565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c8565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f18565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156db565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f8565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157eb565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c906001615810565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615837565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f2e565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab8284018461585c565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f18565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f18565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f2e565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f8565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158e0565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e6919061599f565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159ed565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f18565b602002602001015184611a7557858381518110611a6857611a68614f18565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613cf0565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f18565b9050602002016020810190611b209190615a13565b63ffffffff1615611b8357848482818110611b3d57611b3d614f18565b9050602002016020810190611b529190615a13565b8b8281518110611b6457611b64614f18565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f18565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f18565b9050602002810190611bc79190615a2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f18565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a74565b9050826060015115611e48578451611e19906020614fcd565b8651611e26906020614fcd565b611e319060a0615a74565b611e3b9190615a74565b611e459082615a74565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef661416c565b6002811115611f0757611f0761416c565b9052509050600281602001516002811115611f2457611f2461416c565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f18565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a87565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615aa0565b60405190819003812061201e918b90602001615ab0565b6040516020818303038152906040528051906020012090506120438a828888886130ec565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615ac4565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615ac4565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615ac4565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b505050505061329f565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a57505050505061329f565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615ac4565b604086015161232c906003615ade565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615ac4565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615ac4565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c76565b506123b085826001613308565b505b6123be84826002613308565b80516123d39060038501906020840190613c76565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615afa565b60405180910390a1610d8384613463565b600061081283836134e6565b600082600001828154811061246057612460614f18565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156db565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613cf0565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f8565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f18565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc8184613535565b8483815181106127de576127de614f18565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a6080015161363d565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f18565b60200260200101519050600061287e898360000151606001516107c6565b905060008160038111156128945761289461416c565b14806128b1575060038160038111156128af576128af61416c565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f18565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f7e565b119050808061296f5750600383600381111561296d5761296d61416c565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f18565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f18565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa61416c565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a61416c565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615bac565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156db565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f18565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b856000015160600151600161367a565b600080612bac86848661371f565b91509150612bc38d8760000151606001518461367a565b8b15612c1a576003826003811115612bdd57612bdd61416c565b03612c1a576000856003811115612bf657612bf661416c565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd8565b6002826003811115612c2e57612c2e61416c565b14612c6f576003826003811115612c4757612c4761416c565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615bf1565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f18565b602002602001015186865a612cdc908f614f7e565b604051612cec9493929190615c16565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c4d565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137d3565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c6a565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138d6565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d36565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d58565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f7e565b6137d3565b50905086811080612faf575081612fac8883614f7e565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b1790526000908180806175305a10156130ae5760405163161c3bf760e01b815260040160405180910390fd5b602060008551602087018a617530fa92503d915060005190508280156130d5575060208210155b80156130e15750600081115b979650505050505050565b8251600090815b81811015612d0457600060018886846020811061311257613112614f18565b61311f91901a601b615a87565b89858151811061313157613131614f18565b602002602001015189868151811061314b5761314b614f18565b602002602001015160405160008152602001604052604051613189949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131ab573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320c5761320c61416c565b600281111561321d5761321d61416c565b905250905060018160200151600281111561323a5761323a61416c565b1461325857604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561328257604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130f3565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132d4576132d4614f18565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff191690556001016132a2565b60005b82518110156115ff57600083828151811061332857613328614f18565b60200260200101519050600060028111156133455761334561416c565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133845761338461416c565b146133a5576004604051631b3fab5160e11b815260040161094d9190615ac4565b6001600160a01b0381166133cc5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133f2576133f261416c565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344f5761344f61416c565b02179055509050505080600101905061330b565b60ff818116600081815260026020526040902060010154620100009004909116906134bb57806134a6576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359995919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135dc9190615e12565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061364b8585856139b0565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613689608085614fa7565b6001600160401b031661369c9190614fcd565b905060006136aa8585611913565b9050816136b960016004614f7e565b901b1916818360038111156136d0576136d061416c565b6001600160401b03871660009081526009602052604081209190921b929092179182916136fe6080886159ed565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374c90889088908890600401615ea9565b600060405180830381600087803b15801561376657600080fd5b505af1925050508015613777575060015b6137b6573d8080156137a5576040519150601f19603f3d011682016040523d82523d6000602084013e6137aa565b606091505b506003925090506137cb565b50506040805160208101909152600081526002905b935093915050565b6000806000806000613852886040516024016137fe91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138d6565b9250925092508261387a578682604051634ff17cad60e11b815260040161094d929190615d36565b60208251146138a9578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138bd9190615d58565b6138c78288614f7e565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f8576138f8613cf0565b6040519080825280601f01601f191660200182016040528015613922576020820181803683370190505b509150863b61393c5763030ed58f60e21b60005260046000fd5b5a8581101561395657632be8ca8b60e21b60005260046000fd5b8590036040810481038710613976576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139995750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d857604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139ec57506101018111155b613a09576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a33576040516309bde33960e01b815260040160405180910390fd5b80600003613a605786600081518110613a4e57613a4e614f18565b60200260200101519350505050613c2e565b6000816001600160401b03811115613a7a57613a7a613cf0565b604051908082528060200260200182016040528015613aa3578160200160208202803683370190505b50905060008080805b85811015613bcd5760006001821b8b811603613b075788851015613af0578c5160018601958e918110613ae157613ae1614f18565b60200260200101519050613b29565b8551600185019487918110613ae157613ae1614f18565b8b5160018401938d918110613b1e57613b1e614f18565b602002602001015190505b600089861015613b59578d5160018701968f918110613b4a57613b4a614f18565b60200260200101519050613b7b565b8651600186019588918110613b7057613b70614f18565b602002602001015190505b82851115613b9c576040516309bde33960e01b815260040160405180910390fd5b613ba68282613c35565b878481518110613bb857613bb8614f18565b60209081029190910101525050600101613aac565b506001850382148015613bdf57508683145b8015613bea57508581145b613c07576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1c57613c1c614f18565b60200260200101519750505050505050505b9392505050565b6000818310613c4d57613c488284613c53565b610812565b61081283835b60408051600160208201529081018390526060810182905260009060800161361f565b828054828255906000526020600020908101928215613ccb579160200282015b82811115613ccb57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c96565b50613cd7929150613cdb565b5090565b5b80821115613cd75760008155600101613cdc565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2857613d28613cf0565b60405290565b60405160a081016001600160401b0381118282101715613d2857613d28613cf0565b60405160c081016001600160401b0381118282101715613d2857613d28613cf0565b604080519081016001600160401b0381118282101715613d2857613d28613cf0565b604051606081016001600160401b0381118282101715613d2857613d28613cf0565b604051601f8201601f191681016001600160401b0381118282101715613dde57613dde613cf0565b604052919050565b60006001600160401b03821115613dff57613dff613cf0565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e3557600080fd5b919050565b801515811461056857600080fd5b8035613e3581613e3a565b60006001600160401b03821115613e6c57613e6c613cf0565b50601f01601f191660200190565b600082601f830112613e8b57600080fd5b8135613e9e613e9982613e53565b613db6565b818152846020838601011115613eb357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ee357600080fd5b82356001600160401b0380821115613efa57600080fd5b818501915085601f830112613f0e57600080fd5b8135613f1c613e9982613de6565b81815260059190911b83018401908481019088831115613f3b57600080fd5b8585015b83811015613fe157803585811115613f575760008081fd5b86016080818c03601f1901811315613f6f5760008081fd5b613f77613d06565b89830135613f8481613e09565b81526040613f93848201613e1e565b8b830152606080850135613fa681613e3a565b83830152928401359289841115613fbf57600091508182fd5b613fcd8f8d86880101613e7a565b908301525085525050918601918601613f3f565b5098975050505050505050565b60005b83811015614009578181015183820152602001613ff1565b50506000910152565b6000815180845261402a816020860160208601613fee565b601f01601f19169290920160200192915050565b6020815260006108126020830184614012565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136726080850182614012565b604080825283519082018190526000906020906060840190828701845b828110156140da5781516001600160401b0316845292840192908401906001016140b5565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412a57601f19868403018552614118838351614051565b948701949250908601906001016140fc565b50909998505050505050505050565b6000806040838503121561414c57600080fd5b61415583613e1e565b915061416360208401613e1e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106141925761419261416c565b9052565b602081016108158284614182565b600060a082840312156141b657600080fd5b6141be613d2e565b9050813581526141d060208301613e1e565b60208201526141e160408301613e1e565b60408201526141f260608301613e1e565b606082015261420360808301613e1e565b608082015292915050565b8035613e3581613e09565b803563ffffffff81168114613e3557600080fd5b600082601f83011261423e57600080fd5b8135602061424e613e9983613de6565b82815260059290921b8401810191818101908684111561426d57600080fd5b8286015b8481101561433d5780356001600160401b03808211156142915760008081fd5b9088019060a0828b03601f19018113156142ab5760008081fd5b6142b3613d2e565b87840135838111156142c55760008081fd5b6142d38d8a83880101613e7a565b8252506040808501356142e581613e09565b828a015260606142f6868201614219565b828401526080915081860135858111156143105760008081fd5b61431e8f8c838a0101613e7a565b9184019190915250919093013590830152508352918301918301614271565b509695505050505050565b6000610140828403121561435b57600080fd5b614363613d50565b905061436f83836141a4565b815260a08201356001600160401b038082111561438b57600080fd5b61439785838601613e7a565b602084015260c08401359150808211156143b057600080fd5b6143bc85838601613e7a565b60408401526143cd60e0850161420e565b606084015261010084013560808401526101208401359150808211156143f257600080fd5b506143ff8482850161422d565b60a08301525092915050565b600082601f83011261441c57600080fd5b8135602061442c613e9983613de6565b82815260059290921b8401810191818101908684111561444b57600080fd5b8286015b8481101561433d5780356001600160401b0381111561446e5760008081fd5b61447c8986838b0101614348565b84525091830191830161444f565b600082601f83011261449b57600080fd5b813560206144ab613e9983613de6565b82815260059290921b840181019181810190868411156144ca57600080fd5b8286015b8481101561433d5780356001600160401b03808211156144ed57600080fd5b818901915089603f83011261450157600080fd5b85820135614511613e9982613de6565b81815260059190911b830160400190878101908c83111561453157600080fd5b604085015b8381101561456a5780358581111561454d57600080fd5b61455c8f6040838a0101613e7a565b845250918901918901614536565b508752505050928401925083016144ce565b600082601f83011261458d57600080fd5b8135602061459d613e9983613de6565b8083825260208201915060208460051b8701019350868411156145bf57600080fd5b602086015b8481101561433d57803583529183019183016145c4565b600082601f8301126145ec57600080fd5b813560206145fc613e9983613de6565b82815260059290921b8401810191818101908684111561461b57600080fd5b8286015b8481101561433d5780356001600160401b038082111561463f5760008081fd5b9088019060a0828b03601f19018113156146595760008081fd5b614661613d2e565b61466c888501613e1e565b8152604080850135848111156146825760008081fd5b6146908e8b8389010161440b565b8a84015250606080860135858111156146a95760008081fd5b6146b78f8c838a010161448a565b83850152506080915081860135858111156146d25760008081fd5b6146e08f8c838a010161457c565b918401919091525091909301359083015250835291830191830161461f565b6000806040838503121561471257600080fd5b6001600160401b038335111561472757600080fd5b61473484843585016145db565b91506001600160401b036020840135111561474e57600080fd5b6020830135830184601f82011261476457600080fd5b614771613e998235613de6565b81358082526020808301929160051b84010187101561478f57600080fd5b602083015b6020843560051b850101811015614935576001600160401b03813511156147ba57600080fd5b87603f8235860101126147cc57600080fd5b6147df613e996020833587010135613de6565b81358501602081810135808452908301929160059190911b016040018a101561480757600080fd5b604083358701015b83358701602081013560051b01604001811015614925576001600160401b038135111561483b57600080fd5b833587018135016040818d03603f1901121561485657600080fd5b61485e613d72565b604082013581526001600160401b036060830135111561487d57600080fd5b8c605f60608401358401011261489257600080fd5b60406060830135830101356148a9613e9982613de6565b808282526020820191508f60608460051b60608801358801010111156148ce57600080fd5b6060808601358601015b60608460051b606088013588010101811015614905576148f781614219565b8352602092830192016148d8565b50806020850152505050808552505060208301925060208101905061480f565b5084525060209283019201614794565b508093505050509250929050565b60008083601f84011261495557600080fd5b5081356001600160401b0381111561496c57600080fd5b6020830191508360208260051b850101111561498757600080fd5b9250929050565b6000806000806000606086880312156149a657600080fd5b85356001600160401b03808211156149bd57600080fd5b6149c989838a01614348565b965060208801359150808211156149df57600080fd5b6149eb89838a01614943565b90965094506040880135915080821115614a0457600080fd5b50614a1188828901614943565b969995985093965092949392505050565b600060808284031215614a3457600080fd5b614a3c613d06565b8235614a4781613e09565b8152614a5560208401614219565b60208201526040830135614a6881613e3a565b60408201526060830135614a7b81613e09565b60608201529392505050565b600060208284031215614a9957600080fd5b81356001600160401b03811115614aaf57600080fd5b820160a08185031215613c2e57600080fd5b803560ff81168114613e3557600080fd5b600060208284031215614ae457600080fd5b61081282614ac1565b60008151808452602080850194506020840160005b83811015614b275781516001600160a01b031687529582019590820190600101614b02565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b8160e0840182614aed565b90506040840151601f198483030160c0850152614b9e8282614aed565b95945050505050565b60008060408385031215614bba57600080fd5b614bc383613e1e565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bf457600080fd5b5081356001600160401b03811115614c0b57600080fd5b60208301915083602082850101111561498757600080fd5b60008060008060008060008060c0898b031215614c3f57600080fd5b614c498a8a614bd1565b975060408901356001600160401b0380821115614c6557600080fd5b614c718c838d01614be2565b909950975060608b0135915080821115614c8a57600080fd5b614c968c838d01614943565b909750955060808b0135915080821115614caf57600080fd5b50614cbc8b828c01614943565b999c989b50969995989497949560a00135949350505050565b600060208284031215614ce757600080fd5b61081282613e1e565b6020815260006108126020830184614051565b600060208284031215614d1557600080fd5b8135613c2e81613e09565b600080600060608486031215614d3557600080fd5b614d3f8585614bd1565b925060408401356001600160401b03811115614d5a57600080fd5b614d6686828701614be2565b9497909650939450505050565b600082601f830112614d8457600080fd5b81356020614d94613e9983613de6565b8083825260208201915060208460051b870101935086841115614db657600080fd5b602086015b8481101561433d578035614dce81613e09565b8352918301918301614dbb565b60006020808385031215614dee57600080fd5b82356001600160401b0380821115614e0557600080fd5b818501915085601f830112614e1957600080fd5b8135614e27613e9982613de6565b81815260059190911b83018401908481019088831115614e4657600080fd5b8585015b83811015613fe157803585811115614e6157600080fd5b860160c0818c03601f19011215614e785760008081fd5b614e80613d50565b8882013581526040614e93818401614ac1565b8a8301526060614ea4818501614ac1565b8284015260809150614eb7828501613e48565b9083015260a08381013589811115614ecf5760008081fd5b614edd8f8d83880101614d73565b838501525060c0840135915088821115614ef75760008081fd5b614f058e8c84870101614d73565b9083015250845250918601918601614e4a565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f4257607f821691505b602082108103614f6257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f68565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fc157614fc1614f91565b92169190910692915050565b808202811582820484141761081557610815614f68565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261501760a0870182614012565b9050606085015186820360608801526150308282614012565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561508557835180516001600160a01b0316835286015186830152928501926001929092019190840190615053565b50979650505050505050565b6020815260006108126020830184614fe4565b6080815260006150b76080830187614fe4565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150f557600080fd5b835161510081613e3a565b60208501519093506001600160401b0381111561511c57600080fd5b8401601f8101861361512d57600080fd5b805161513b613e9982613e53565b81815287602083850101111561515057600080fd5b615161826020830160208601613fee565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e3557600080fd5b600082601f83011261519d57600080fd5b813560206151ad613e9983613de6565b82815260069290921b840181019181810190868411156151cc57600080fd5b8286015b8481101561433d57604081890312156151e95760008081fd5b6151f1613d72565b6151fa82613e1e565b8152615207858301615175565b818601528352918301916040016151d0565b600082601f83011261522a57600080fd5b8135602061523a613e9983613de6565b82815260059290921b8401810191818101908684111561525957600080fd5b8286015b8481101561433d5780356001600160401b038082111561527d5760008081fd5b9088019060a0828b03601f19018113156152975760008081fd5b61529f613d2e565b6152aa888501613e1e565b8152604080850135848111156152c05760008081fd5b6152ce8e8b83890101613e7a565b8a84015250606093506152e2848601613e1e565b9082015260806152f3858201613e1e565b9382019390935292013590820152835291830191830161525d565b600082601f83011261531f57600080fd5b8135602061532f613e9983613de6565b82815260069290921b8401810191818101908684111561534e57600080fd5b8286015b8481101561433d576040818903121561536b5760008081fd5b615373613d72565b813581528482013585820152835291830191604001615352565b600060208083850312156153a057600080fd5b82356001600160401b03808211156153b757600080fd5b90840190606082870312156153cb57600080fd5b6153d3613d94565b8235828111156153e257600080fd5b830160408189038113156153f557600080fd5b6153fd613d72565b82358581111561540c57600080fd5b8301601f81018b1361541d57600080fd5b803561542b613e9982613de6565b81815260069190911b8201890190898101908d83111561544a57600080fd5b928a01925b8284101561549a5785848f0312156154675760008081fd5b61546f613d72565b843561547a81613e09565b8152615487858d01615175565b818d0152825292850192908a019061544f565b8452505050828701359150848211156154b257600080fd5b6154be8a83850161518c565b818801528352505082840135828111156154d757600080fd5b6154e388828601615219565b858301525060408301359350818411156154fc57600080fd5b6155088785850161530e565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a857601f19868403018952815160a06001600160401b0380835116865286830151828888015261556c83880182614012565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615534565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d86060840186615517565b83810360408581019190915285518083528387019284019060005b8181101561412a578451805184528601518684015293850193918301916001016155f3565b805160408084528151848201819052600092602091908201906060870190855b8181101561566f57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615638565b50508583015187820388850152805180835290840192506000918401905b8083101561508557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061568d565b6020815260006108126020830184615618565b6000602082840312156156ed57600080fd5b8151613c2e81613e3a565b600080835461570681614f2e565b6001828116801561571e576001811461573357615762565b60ff1984168752821515830287019450615762565b8760005260208060002060005b858110156157595781548a820152908401908201615740565b50505082870194505b50929695505050505050565b6000815461577b81614f2e565b80855260206001838116801561579857600181146157b2576157e0565b60ff1985168884015283151560051b8801830195506157e0565b866000528260002060005b858110156157d85781548a82018601529083019084016157bd565b890184019650505b505050505092915050565b6040815260006157fe6040830185614012565b8281036020840152614b9e818561576e565b6001600160401b0381811683821601908082111561583057615830614f68565b5092915050565b60408152600061584a6040830185615517565b8281036020840152614b9e8185615618565b60006020828403121561586e57600080fd5b81356001600160401b0381111561588457600080fd5b613672848285016145db565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b95750805b601f850160051c820191505b818110156158d8578281556001016158c5565b505050505050565b81516001600160401b038111156158f9576158f9613cf0565b61590d816159078454614f2e565b84615890565b602080601f831160018114615942576000841561592a5750858301515b600019600386901b1c1916600185901b1785556158d8565b600085815260208120601f198616915b8281101561597157888601518255948401946001909101908401615952565b508582101561598f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a083016001850161576e565b60006001600160401b0380841680615a0757615a07614f91565b92169190910492915050565b600060208284031215615a2557600080fd5b61081282614219565b6000808335601e19843603018112615a4557600080fd5b8301803591506001600160401b03821115615a5f57600080fd5b60200191503681900382131561498757600080fd5b8082018082111561081557610815614f68565b60ff818116838216019081111561081557610815614f68565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad857615ad861416c565b91905290565b60ff818116838216029081169081811461583057615830614f68565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b525784546001600160a01b031683526001948501949284019201615b2d565b50508481036060860152865180825290820192508187019060005b81811015615b925782516001600160a01b031685529383019391830191600101615b6d565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b9e6060830184614012565b8281526040602082015260006136726040830184614012565b6001600160401b03848116825283166020820152606081016136726040830184614182565b848152615c266020820185614182565b608060408201526000615c3c6080830185614012565b905082606083015295945050505050565b600060208284031215615c5f57600080fd5b8151613c2e81613e09565b6020815260008251610100806020850152615c89610120850183614012565b91506020850151615ca560408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cdf60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cfc8483614012565b935060c08701519150808685030160e0870152615d198483614012565b935060e0870151915080868503018387015250615ba28382614012565b6001600160a01b03831681526040602082015260006136726040830184614012565b600060208284031215615d6a57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a857601f19868403018952815160a08151818652615db482870182614012565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615df08382614012565b6080948501519790940196909652505098840198925090830190600101615d8e565b6020815260006108126020830184615d71565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a857601f19868403018952615e60838351614012565b98840198925090830190600101615e44565b60008151808452602080850194506020840160005b83811015614b2757815163ffffffff1687529582019590820190600101615e87565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f116101a0850183614012565b91506040870151605f198086850301610120870152615f308483614012565b935060608901519150615f4d838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f768282615d71565b9150508281036020840152615f8b8186615e25565b90508281036040840152615ba28185615e7256fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d1f38038062006d1f833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fa462000d7b600039600081816101b001528181610ce801528181612ed101526138240152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fa46000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613ec8565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd9190614036565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614090565b61035361034e366004614131565b6107c6565b6040516102bd919061418e565b61014461036e3660046146f7565b61081b565b610144610381366004614986565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a1a565b610e0d565b61014461012c366004614a7f565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614aca565b610e1e565b6040516102bd9190614b2a565b6104dd6104b5366004614b9f565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c1b565b610f7c565b61051161050c366004614ccd565b61147f565b6040516102bd9190614ce8565b61014461052c366004614cfb565b61158b565b61014461053f366004614d18565b61159c565b610144610552366004614dd3565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613ce8565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613ce8565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f10565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f10565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f26565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f26565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f10565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f76565b60026107e1608085614f9f565b6001600160401b03166107f49190614fc5565b6107fe8585611913565b901c16600381111561081257610812614164565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f10565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f10565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f10565b60200260200101516000015190506000856020015183815181106108fd576108fd614f10565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f10565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f10565b60200260200101516020015182815181106109f6576109f6614f10565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f10565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb908590600401615089565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d9190614036565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f0000000000000000000000000000000000000000000000000000000000000000929160040161509c565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150d8565b509150915081610d7d57806040516302a35ba360e21b815260040161094d9190614036565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a87890189615385565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155ad565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c0565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f10565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156d3565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f0565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157e3565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c906001615808565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261140392909161582f565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f26565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f26565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab82840184615854565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f10565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f10565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f26565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f0565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158d8565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e69190615997565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159e5565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f10565b602002602001015184611a7557858381518110611a6857611a68614f10565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613ce8565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f10565b9050602002016020810190611b209190615a0b565b63ffffffff1615611b8357848482818110611b3d57611b3d614f10565b9050602002016020810190611b529190615a0b565b8b8281518110611b6457611b64614f10565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f10565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f10565b9050602002810190611bc79190615a26565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f10565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a6c565b9050826060015115611e48578451611e19906020614fc5565b8651611e26906020614fc5565b611e319060a0615a6c565b611e3b9190615a6c565b611e459082615a6c565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef6614164565b6002811115611f0757611f07614164565b9052509050600281602001516002811115611f2457611f24614164565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f10565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a7f565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615a98565b60405190819003812061201e918b90602001615aa8565b6040516020818303038152906040528051906020012090506120438a828888886130e4565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615abc565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615abc565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615abc565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b5050505050613297565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a575050505050613297565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615abc565b604086015161232c906003615ad6565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615abc565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615abc565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c6e565b506123b085826001613300565b505b6123be84826002613300565b80516123d39060038501906020840190613c6e565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615af2565b60405180910390a1610d838461345b565b600061081283836134de565b600082600001828154811061246057612460614f10565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156d3565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613ce8565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f0565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f10565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc818461352d565b8483815181106127de576127de614f10565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a60800151613635565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f10565b60200260200101519050600061287e898360000151606001516107c6565b9050600081600381111561289457612894614164565b14806128b1575060038160038111156128af576128af614164565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f10565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f76565b119050808061296f5750600383600381111561296d5761296d614164565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f10565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f10565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa614164565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a614164565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615ba4565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156d3565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f10565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b8560000151606001516001613672565b600080612bac868486613717565b91509150612bc38d87600001516060015184613672565b8b15612c1a576003826003811115612bdd57612bdd614164565b03612c1a576000856003811115612bf657612bf6614164565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd0565b6002826003811115612c2e57612c2e614164565b14612c6f576003826003811115612c4757612c47614164565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615be9565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f10565b602002602001015186865a612cdc908f614f76565b604051612cec9493929190615c0e565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c45565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137cb565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c62565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138ce565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d2e565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d50565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f76565b6137cb565b50905086811080612faf575081612fac8883614f76565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b179052600090818080617d005a10156130a65763161c3bf760e01b60005260046000fd5b602060008551602087018a617530fa92503d915060005190508280156130cd575060208210155b80156130d95750600081115b979650505050505050565b8251600090815b81811015612d0457600060018886846020811061310a5761310a614f10565b61311791901a601b615a7f565b89858151811061312957613129614f10565b602002602001015189868151811061314357613143614f10565b602002602001015160405160008152602001604052604051613181949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131a3573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320457613204614164565b600281111561321557613215614164565b905250905060018160200151600281111561323257613232614164565b1461325057604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561327a57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130eb565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132cc576132cc614f10565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161329a565b60005b82518110156115ff57600083828151811061332057613320614f10565b602002602001015190506000600281111561333d5761333d614164565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561337c5761337c614164565b1461339d576004604051631b3fab5160e11b815260040161094d9190615abc565b6001600160a01b0381166133c45760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133ea576133ea614164565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344757613447614164565b021790555090505050806001019050613303565b60ff818116600081815260026020526040902060010154620100009004909116906134b3578061349e576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359195919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135d49190615e0a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136438585856139a8565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613681608085614f9f565b6001600160401b03166136949190614fc5565b905060006136a28585611913565b9050816136b160016004614f76565b901b1916818360038111156136c8576136c8614164565b6001600160401b03871660009081526009602052604081209190921b929092179182916136f66080886159e5565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374490889088908890600401615ea1565b600060405180830381600087803b15801561375e57600080fd5b505af192505050801561376f575060015b6137ae573d80801561379d576040519150601f19603f3d011682016040523d82523d6000602084013e6137a2565b606091505b506003925090506137c3565b50506040805160208101909152600081526002905b935093915050565b600080600080600061384a886040516024016137f691906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138ce565b92509250925082613872578682604051634ff17cad60e11b815260040161094d929190615d2e565b60208251146138a1578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138b59190615d50565b6138bf8288614f76565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f0576138f0613ce8565b6040519080825280601f01601f19166020018201604052801561391a576020820181803683370190505b509150863b6139345763030ed58f60e21b60005260046000fd5b5a8581101561394e57632be8ca8b60e21b60005260046000fd5b859003604081048103871061396e576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139915750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d057604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139e457506101018111155b613a01576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a2b576040516309bde33960e01b815260040160405180910390fd5b80600003613a585786600081518110613a4657613a46614f10565b60200260200101519350505050613c26565b6000816001600160401b03811115613a7257613a72613ce8565b604051908082528060200260200182016040528015613a9b578160200160208202803683370190505b50905060008080805b85811015613bc55760006001821b8b811603613aff5788851015613ae8578c5160018601958e918110613ad957613ad9614f10565b60200260200101519050613b21565b8551600185019487918110613ad957613ad9614f10565b8b5160018401938d918110613b1657613b16614f10565b602002602001015190505b600089861015613b51578d5160018701968f918110613b4257613b42614f10565b60200260200101519050613b73565b8651600186019588918110613b6857613b68614f10565b602002602001015190505b82851115613b94576040516309bde33960e01b815260040160405180910390fd5b613b9e8282613c2d565b878481518110613bb057613bb0614f10565b60209081029190910101525050600101613aa4565b506001850382148015613bd757508683145b8015613be257508581145b613bff576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1457613c14614f10565b60200260200101519750505050505050505b9392505050565b6000818310613c4557613c408284613c4b565b610812565b61081283835b604080516001602082015290810183905260608101829052600090608001613617565b828054828255906000526020600020908101928215613cc3579160200282015b82811115613cc357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c8e565b50613ccf929150613cd3565b5090565b5b80821115613ccf5760008155600101613cd4565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2057613d20613ce8565b60405290565b60405160a081016001600160401b0381118282101715613d2057613d20613ce8565b60405160c081016001600160401b0381118282101715613d2057613d20613ce8565b604080519081016001600160401b0381118282101715613d2057613d20613ce8565b604051606081016001600160401b0381118282101715613d2057613d20613ce8565b604051601f8201601f191681016001600160401b0381118282101715613dd657613dd6613ce8565b604052919050565b60006001600160401b03821115613df757613df7613ce8565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e2d57600080fd5b919050565b801515811461056857600080fd5b8035613e2d81613e32565b60006001600160401b03821115613e6457613e64613ce8565b50601f01601f191660200190565b600082601f830112613e8357600080fd5b8135613e96613e9182613e4b565b613dae565b818152846020838601011115613eab57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613edb57600080fd5b82356001600160401b0380821115613ef257600080fd5b818501915085601f830112613f0657600080fd5b8135613f14613e9182613dde565b81815260059190911b83018401908481019088831115613f3357600080fd5b8585015b83811015613fd957803585811115613f4f5760008081fd5b86016080818c03601f1901811315613f675760008081fd5b613f6f613cfe565b89830135613f7c81613e01565b81526040613f8b848201613e16565b8b830152606080850135613f9e81613e32565b83830152928401359289841115613fb757600091508182fd5b613fc58f8d86880101613e72565b908301525085525050918601918601613f37565b5098975050505050505050565b60005b83811015614001578181015183820152602001613fe9565b50506000910152565b60008151808452614022816020860160208601613fe6565b601f01601f19169290920160200192915050565b602081526000610812602083018461400a565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261366a608085018261400a565b604080825283519082018190526000906020906060840190828701845b828110156140d25781516001600160401b0316845292840192908401906001016140ad565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412257601f19868403018552614110838351614049565b948701949250908601906001016140f4565b50909998505050505050505050565b6000806040838503121561414457600080fd5b61414d83613e16565b915061415b60208401613e16565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061418a5761418a614164565b9052565b60208101610815828461417a565b600060a082840312156141ae57600080fd5b6141b6613d26565b9050813581526141c860208301613e16565b60208201526141d960408301613e16565b60408201526141ea60608301613e16565b60608201526141fb60808301613e16565b608082015292915050565b8035613e2d81613e01565b803563ffffffff81168114613e2d57600080fd5b600082601f83011261423657600080fd5b81356020614246613e9183613dde565b82815260059290921b8401810191818101908684111561426557600080fd5b8286015b848110156143355780356001600160401b03808211156142895760008081fd5b9088019060a0828b03601f19018113156142a35760008081fd5b6142ab613d26565b87840135838111156142bd5760008081fd5b6142cb8d8a83880101613e72565b8252506040808501356142dd81613e01565b828a015260606142ee868201614211565b828401526080915081860135858111156143085760008081fd5b6143168f8c838a0101613e72565b9184019190915250919093013590830152508352918301918301614269565b509695505050505050565b6000610140828403121561435357600080fd5b61435b613d48565b9050614367838361419c565b815260a08201356001600160401b038082111561438357600080fd5b61438f85838601613e72565b602084015260c08401359150808211156143a857600080fd5b6143b485838601613e72565b60408401526143c560e08501614206565b606084015261010084013560808401526101208401359150808211156143ea57600080fd5b506143f784828501614225565b60a08301525092915050565b600082601f83011261441457600080fd5b81356020614424613e9183613dde565b82815260059290921b8401810191818101908684111561444357600080fd5b8286015b848110156143355780356001600160401b038111156144665760008081fd5b6144748986838b0101614340565b845250918301918301614447565b600082601f83011261449357600080fd5b813560206144a3613e9183613dde565b82815260059290921b840181019181810190868411156144c257600080fd5b8286015b848110156143355780356001600160401b03808211156144e557600080fd5b818901915089603f8301126144f957600080fd5b85820135614509613e9182613dde565b81815260059190911b830160400190878101908c83111561452957600080fd5b604085015b838110156145625780358581111561454557600080fd5b6145548f6040838a0101613e72565b84525091890191890161452e565b508752505050928401925083016144c6565b600082601f83011261458557600080fd5b81356020614595613e9183613dde565b8083825260208201915060208460051b8701019350868411156145b757600080fd5b602086015b8481101561433557803583529183019183016145bc565b600082601f8301126145e457600080fd5b813560206145f4613e9183613dde565b82815260059290921b8401810191818101908684111561461357600080fd5b8286015b848110156143355780356001600160401b03808211156146375760008081fd5b9088019060a0828b03601f19018113156146515760008081fd5b614659613d26565b614664888501613e16565b81526040808501358481111561467a5760008081fd5b6146888e8b83890101614403565b8a84015250606080860135858111156146a15760008081fd5b6146af8f8c838a0101614482565b83850152506080915081860135858111156146ca5760008081fd5b6146d88f8c838a0101614574565b9184019190915250919093013590830152508352918301918301614617565b6000806040838503121561470a57600080fd5b6001600160401b038335111561471f57600080fd5b61472c84843585016145d3565b91506001600160401b036020840135111561474657600080fd5b6020830135830184601f82011261475c57600080fd5b614769613e918235613dde565b81358082526020808301929160051b84010187101561478757600080fd5b602083015b6020843560051b85010181101561492d576001600160401b03813511156147b257600080fd5b87603f8235860101126147c457600080fd5b6147d7613e916020833587010135613dde565b81358501602081810135808452908301929160059190911b016040018a10156147ff57600080fd5b604083358701015b83358701602081013560051b0160400181101561491d576001600160401b038135111561483357600080fd5b833587018135016040818d03603f1901121561484e57600080fd5b614856613d6a565b604082013581526001600160401b036060830135111561487557600080fd5b8c605f60608401358401011261488a57600080fd5b60406060830135830101356148a1613e9182613dde565b808282526020820191508f60608460051b60608801358801010111156148c657600080fd5b6060808601358601015b60608460051b6060880135880101018110156148fd576148ef81614211565b8352602092830192016148d0565b508060208501525050508085525050602083019250602081019050614807565b508452506020928301920161478c565b508093505050509250929050565b60008083601f84011261494d57600080fd5b5081356001600160401b0381111561496457600080fd5b6020830191508360208260051b850101111561497f57600080fd5b9250929050565b60008060008060006060868803121561499e57600080fd5b85356001600160401b03808211156149b557600080fd5b6149c189838a01614340565b965060208801359150808211156149d757600080fd5b6149e389838a0161493b565b909650945060408801359150808211156149fc57600080fd5b50614a098882890161493b565b969995985093965092949392505050565b600060808284031215614a2c57600080fd5b614a34613cfe565b8235614a3f81613e01565b8152614a4d60208401614211565b60208201526040830135614a6081613e32565b60408201526060830135614a7381613e01565b60608201529392505050565b600060208284031215614a9157600080fd5b81356001600160401b03811115614aa757600080fd5b820160a08185031215613c2657600080fd5b803560ff81168114613e2d57600080fd5b600060208284031215614adc57600080fd5b61081282614ab9565b60008151808452602080850194506020840160005b83811015614b1f5781516001600160a01b031687529582019590820190600101614afa565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b7960e0840182614ae5565b90506040840151601f198483030160c0850152614b968282614ae5565b95945050505050565b60008060408385031215614bb257600080fd5b614bbb83613e16565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bec57600080fd5b5081356001600160401b03811115614c0357600080fd5b60208301915083602082850101111561497f57600080fd5b60008060008060008060008060c0898b031215614c3757600080fd5b614c418a8a614bc9565b975060408901356001600160401b0380821115614c5d57600080fd5b614c698c838d01614bda565b909950975060608b0135915080821115614c8257600080fd5b614c8e8c838d0161493b565b909750955060808b0135915080821115614ca757600080fd5b50614cb48b828c0161493b565b999c989b50969995989497949560a00135949350505050565b600060208284031215614cdf57600080fd5b61081282613e16565b6020815260006108126020830184614049565b600060208284031215614d0d57600080fd5b8135613c2681613e01565b600080600060608486031215614d2d57600080fd5b614d378585614bc9565b925060408401356001600160401b03811115614d5257600080fd5b614d5e86828701614bda565b9497909650939450505050565b600082601f830112614d7c57600080fd5b81356020614d8c613e9183613dde565b8083825260208201915060208460051b870101935086841115614dae57600080fd5b602086015b84811015614335578035614dc681613e01565b8352918301918301614db3565b60006020808385031215614de657600080fd5b82356001600160401b0380821115614dfd57600080fd5b818501915085601f830112614e1157600080fd5b8135614e1f613e9182613dde565b81815260059190911b83018401908481019088831115614e3e57600080fd5b8585015b83811015613fd957803585811115614e5957600080fd5b860160c0818c03601f19011215614e705760008081fd5b614e78613d48565b8882013581526040614e8b818401614ab9565b8a8301526060614e9c818501614ab9565b8284015260809150614eaf828501613e40565b9083015260a08381013589811115614ec75760008081fd5b614ed58f8d83880101614d6b565b838501525060c0840135915088821115614eef5760008081fd5b614efd8e8c84870101614d6b565b9083015250845250918601918601614e42565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f3a57607f821691505b602082108103614f5a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f60565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fb957614fb9614f89565b92169190910692915050565b808202811582820484141761081557610815614f60565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261500f60a087018261400a565b905060608501518682036060880152615028828261400a565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561507d57835180516001600160a01b031683528601518683015292850192600192909201919084019061504b565b50979650505050505050565b6020815260006108126020830184614fdc565b6080815260006150af6080830187614fdc565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150ed57600080fd5b83516150f881613e32565b60208501519093506001600160401b0381111561511457600080fd5b8401601f8101861361512557600080fd5b8051615133613e9182613e4b565b81815287602083850101111561514857600080fd5b615159826020830160208601613fe6565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e2d57600080fd5b600082601f83011261519557600080fd5b813560206151a5613e9183613dde565b82815260069290921b840181019181810190868411156151c457600080fd5b8286015b8481101561433557604081890312156151e15760008081fd5b6151e9613d6a565b6151f282613e16565b81526151ff85830161516d565b818601528352918301916040016151c8565b600082601f83011261522257600080fd5b81356020615232613e9183613dde565b82815260059290921b8401810191818101908684111561525157600080fd5b8286015b848110156143355780356001600160401b03808211156152755760008081fd5b9088019060a0828b03601f190181131561528f5760008081fd5b615297613d26565b6152a2888501613e16565b8152604080850135848111156152b85760008081fd5b6152c68e8b83890101613e72565b8a84015250606093506152da848601613e16565b9082015260806152eb858201613e16565b93820193909352920135908201528352918301918301615255565b600082601f83011261531757600080fd5b81356020615327613e9183613dde565b82815260069290921b8401810191818101908684111561534657600080fd5b8286015b8481101561433557604081890312156153635760008081fd5b61536b613d6a565b81358152848201358582015283529183019160400161534a565b6000602080838503121561539857600080fd5b82356001600160401b03808211156153af57600080fd5b90840190606082870312156153c357600080fd5b6153cb613d8c565b8235828111156153da57600080fd5b830160408189038113156153ed57600080fd5b6153f5613d6a565b82358581111561540457600080fd5b8301601f81018b1361541557600080fd5b8035615423613e9182613dde565b81815260069190911b8201890190898101908d83111561544257600080fd5b928a01925b828410156154925785848f03121561545f5760008081fd5b615467613d6a565b843561547281613e01565b815261547f858d0161516d565b818d0152825292850192908a0190615447565b8452505050828701359150848211156154aa57600080fd5b6154b68a838501615184565b818801528352505082840135828111156154cf57600080fd5b6154db88828601615211565b858301525060408301359350818411156154f457600080fd5b61550087858501615306565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a057601f19868403018952815160a06001600160401b038083511686528683015182888801526155648388018261400a565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161552c565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d0606084018661550f565b83810360408581019190915285518083528387019284019060005b81811015614122578451805184528601518684015293850193918301916001016155eb565b805160408084528151848201819052600092602091908201906060870190855b8181101561566757835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615630565b50508583015187820388850152805180835290840192506000918401905b8083101561507d57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615685565b6020815260006108126020830184615610565b6000602082840312156156e557600080fd5b8151613c2681613e32565b60008083546156fe81614f26565b60018281168015615716576001811461572b5761575a565b60ff198416875282151583028701945061575a565b8760005260208060002060005b858110156157515781548a820152908401908201615738565b50505082870194505b50929695505050505050565b6000815461577381614f26565b80855260206001838116801561579057600181146157aa576157d8565b60ff1985168884015283151560051b8801830195506157d8565b866000528260002060005b858110156157d05781548a82018601529083019084016157b5565b890184019650505b505050505092915050565b6040815260006157f6604083018561400a565b8281036020840152614b968185615766565b6001600160401b0381811683821601908082111561582857615828614f60565b5092915050565b604081526000615842604083018561550f565b8281036020840152614b968185615610565b60006020828403121561586657600080fd5b81356001600160401b0381111561587c57600080fd5b61366a848285016145d3565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b15750805b601f850160051c820191505b818110156158d0578281556001016158bd565b505050505050565b81516001600160401b038111156158f1576158f1613ce8565b615905816158ff8454614f26565b84615888565b602080601f83116001811461593a57600084156159225750858301515b600019600386901b1c1916600185901b1785556158d0565b600085815260208120601f198616915b828110156159695788860151825594840194600190910190840161594a565b50858210156159875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a0830160018501615766565b60006001600160401b03808416806159ff576159ff614f89565b92169190910492915050565b600060208284031215615a1d57600080fd5b61081282614211565b6000808335601e19843603018112615a3d57600080fd5b8301803591506001600160401b03821115615a5757600080fd5b60200191503681900382131561497f57600080fd5b8082018082111561081557610815614f60565b60ff818116838216019081111561081557610815614f60565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad057615ad0614164565b91905290565b60ff818116838216029081169081811461582857615828614f60565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b4a5784546001600160a01b031683526001948501949284019201615b25565b50508481036060860152865180825290820192508187019060005b81811015615b8a5782516001600160a01b031685529383019391830191600101615b65565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b96606083018461400a565b82815260406020820152600061366a604083018461400a565b6001600160401b038481168252831660208201526060810161366a604083018461417a565b848152615c1e602082018561417a565b608060408201526000615c34608083018561400a565b905082606083015295945050505050565b600060208284031215615c5757600080fd5b8151613c2681613e01565b6020815260008251610100806020850152615c8161012085018361400a565b91506020850151615c9d60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cd760a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cf4848361400a565b935060c08701519150808685030160e0870152615d11848361400a565b935060e0870151915080868503018387015250615b9a838261400a565b6001600160a01b038316815260406020820152600061366a604083018461400a565b600060208284031215615d6257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a057601f19868403018952815160a08151818652615dac8287018261400a565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615de8838261400a565b6080948501519790940196909652505098840198925090830190600101615d86565b6020815260006108126020830184615d69565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a057601f19868403018952615e5883835161400a565b98840198925090830190600101615e3c565b60008151808452602080850194506020840160005b83811015614b1f57815163ffffffff1687529582019590820190600101615e7f565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f096101a085018361400a565b91506040870151605f198086850301610120870152615f28848361400a565b935060608901519150615f45838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f6e8282615d69565b9150508281036020840152615f838186615e1d565b90508281036040840152615b9a8185615e6a56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.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 660c45e6784..34bbce81354 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 @@ -16,7 +16,7 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin c3cac2010c2815b484055bf981363a2bd04e7fbe7bb502dc8fd29a16165d221c multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin a523e11ea4c069d7d61b309c156951cc6834aff0f352bd1ac37c3a838ff2588f nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin e6008490d916826cefd1903612db39621d51617300fc9bb42b68c6c117958198 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8bc4ced67140c757cc483f19f797634bbc170350ca86890a0a9f189c45cab77a +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8e6c048d3a7799f4149bd7e470064be375a35538404b30ade4798ac27f8dbf7e onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 2bf74188a997218502031f177cb2df505b272d66b25fd341a741289e77380c59 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 24b4415a883a470d65c484be0fa20714a46b1c9262db205f1c958017820307b2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 0fc277a0b512db4e20b5a32a775b94ed2c0d342d8237511de78c94f7dacad428 From e87c26b3dd6d959a37e297eb8c75ac9c85d3797e Mon Sep 17 00:00:00 2001 From: Josh Date: Wed, 18 Dec 2024 17:52:50 -0500 Subject: [PATCH 10/15] fix snapshot issues from duplicate tests --- contracts/gas-snapshots/ccip.gas-snapshot | 6 +-- ...Reverting.supportsInterfaceReverting.t.sol | 39 ------------------- 2 files changed, 1 insertion(+), 44 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index a4233ce2bb5..504566402ac 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -71,14 +71,10 @@ DefensiveExampleTest:test_Recovery() (gas: 425013) E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1513205) ERC165CheckerReverting_getSupportedInterfaces:test__getSupportedInterfacesReverting() (gas: 11479) ERC165CheckerReverting_supportsInterfaceReverting:test__getSupportedInterfacesReverting() (gas: 11490) -ERC165CheckerReverting_supportsInterfaceReverting:test__getSupportedInterfacesReverting() (gas: 11511) ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting() (gas: 10828) -ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting() (gas: 10839) ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notAllSupported() (gas: 11882) -ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notAllSupported() (gas: 11882) -ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notSupportsERC165() (gas: 6494) ERC165CheckerReverting_supportsInterfaceReverting:test__supportsAllInterfacesReverting_notSupportsERC165() (gas: 6494) -ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10463) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10452) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol index 15deaddd636..9036fd9983e 100644 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol @@ -13,47 +13,8 @@ contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRever assertTrue(s_receiver._supportsInterfaceReverting(type(IAny2EVMMessageReceiver).interfaceId)); } - function test__getSupportedInterfacesReverting() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); - assertTrue(supportedIds[0]); - assertEq(interfaceIds.length, supportedIds.length); - } - - function test__supportsAllInterfacesReverting() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - assertTrue(s_receiver._supportsAllInterfacesReverting(interfaceIds)); - } - - function test__supportsAllInterfacesReverting_notAllSupported() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - assertFalse(s_receiver._supportsAllInterfacesReverting(interfaceIds)); - } - // Reverts - function test__supportsAllInterfacesReverting_notSupportsERC165() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - // An address that does not support ERC165 - address randomAddress = address(0xdead); - - assertFalse(randomAddress._supportsAllInterfacesReverting(interfaceIds)); - } - function test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() public { vm.expectRevert(NOT_ENOUGH_GAS_SIG); From dc54925ef1b248dea7270975f4243de99dd68004 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 19 Dec 2024 11:12:17 -0500 Subject: [PATCH 11/15] remove unnec. functions and better format library to conform to CL style guide. --- contracts/gas-snapshots/ccip.gas-snapshot | 101 ++++++------ .../ccip/libraries/ERC165CheckerReverting.sol | 144 +++++------------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 2 +- ...Reverting.supportsInterfaceReverting.t.sol | 22 ++- ...ting.getSupportedInterfacesReverting.t.sol | 21 --- ...rting.supportsAllInterfacesReverting.t.sol | 52 ------- .../ERC165CheckerRevertingSetup.t.sol | 17 --- 7 files changed, 107 insertions(+), 252 deletions(-) rename contracts/src/v0.8/ccip/test/libraries/{ERC165CheckerReverting => }/ERC165CheckerReverting.supportsInterfaceReverting.t.sol (56%) delete mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol delete mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol delete mode 100644 contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index d9a3baac08a..7e2085f4da2 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -28,7 +28,8 @@ CCIPHome_setCandidate:test_setCandidate() (gas: 1365438) CCIPHome_supportsInterface:test_supportsInterface() (gas: 9885) DefensiveExampleTest:test_HappyPath() (gas: 200521) DefensiveExampleTest:test_Recovery() (gas: 425013) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1487929) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1488604) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10485) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) @@ -195,11 +196,11 @@ NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123593) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45963) NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66943) NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12191) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 178734) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 145889) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182209) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 244710) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213585) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 178809) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 145964) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182284) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 244860) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213660) NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60520) NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37979) NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38756) @@ -215,12 +216,12 @@ OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates() (gas: 16720) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain() (gas: 181035) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp() (gas: 168558) OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed() (gas: 284716) -OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 325065) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 170394) -OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 268364) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 161411) -OffRamp_batchExecute:test_SingleReport() (gas: 149342) -OffRamp_batchExecute:test_Unhealthy() (gas: 532022) +OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 325290) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 170469) +OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 268589) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 161486) +OffRamp_batchExecute:test_SingleReport() (gas: 149417) +OffRamp_batchExecute:test_Unhealthy() (gas: 532472) OffRamp_commit:test_OnlyGasPriceUpdates() (gas: 112719) OffRamp_commit:test_OnlyTokenPriceUpdates() (gas: 112673) OffRamp_commit:test_PriceSequenceNumberCleared() (gas: 354787) @@ -229,51 +230,51 @@ OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 140878) OffRamp_commit:test_RootWithRMNDisabled() (gas: 153674) OffRamp_commit:test_StaleReportWithRoot() (gas: 231732) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot() (gas: 206199) -OffRamp_constructor:test_Constructor() (gas: 6210275) -OffRamp_execute:test_LargeBatch() (gas: 3354418) -OffRamp_execute:test_MultipleReports() (gas: 290585) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 364141) -OffRamp_execute:test_SingleReport() (gas: 168585) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51593) +OffRamp_constructor:test_Constructor() (gas: 6214884) +OffRamp_execute:test_LargeBatch() (gas: 3356668) +OffRamp_execute:test_MultipleReports() (gas: 290810) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 364216) +OffRamp_execute:test_SingleReport() (gas: 168660) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51668) OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230350) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87432) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 259856) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 454636) -OffRamp_executeSingleReport:test_ReceiverError() (gas: 180665) -OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 204824) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241135) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 184833) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 243821) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134435) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230500) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87507) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 260081) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 454936) +OffRamp_executeSingleReport:test_ReceiverError() (gas: 180740) +OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 204974) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241285) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 184983) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 243852) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134510) OffRamp_executeSingleReport:test_SkippedIncorrectNonce() (gas: 58298) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 391797) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 561276) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 509640) -OffRamp_executeSingleReport:test_Unhealthy() (gas: 527805) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 438850) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 157823) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128214) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 392022) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 561726) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 510090) +OffRamp_executeSingleReport:test_Unhealthy() (gas: 528255) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439300) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 157898) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128289) OffRamp_getExecutionState:test_FillExecutionState() (gas: 3905742) OffRamp_getExecutionState:test_GetDifferentChainExecutionState() (gas: 121049) OffRamp_getExecutionState:test_GetExecutionState() (gas: 89738) -OffRamp_manuallyExecute:test_manuallyExecute() (gas: 211986) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165552) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 475495) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2214817) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 212536) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 729871) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 335954) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94597) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161092) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 162962) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174201) +OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212136) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165627) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 475645) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2214967) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 212686) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 730621) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 336254) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94672) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161242) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 163112) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174351) OffRamp_setDynamicConfig:test_SetDynamicConfig() (gas: 25397) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor() (gas: 47448) -OffRamp_trialExecute:test_trialExecute() (gas: 263492) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120655) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 131965) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 281133) +OffRamp_trialExecute:test_trialExecute() (gas: 263717) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120730) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132040) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 281358) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy() (gas: 244196) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates() (gas: 325984) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) diff --git a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol index 11f8f8d5885..1ff6f08c772 100644 --- a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol +++ b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol @@ -1,135 +1,67 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; import {IERC165} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/utils/introspection/IERC165.sol"; -/** - * @dev Library used to query support of an interface declared via {IERC165}. - * - * Note that these functions return the actual result of the query: they do not - * `revert` if an interface is not supported. It is up to the caller to decide - * what to do in these cases. - * - * Note this is exactly the same as the OZ version, with the exception that external calls will revert - * if < 31_000 gas is available, to prevent message delivery issues in CCIP. - */ +/// @notice Library used to query support of an interface declared via {IERC165}. +/// @dev These functions return the actual result of the query: they do not `revert` if an interface is not supported. library ERC165CheckerReverting { - // As per the EIP-165 spec, no interface should ever match 0xffffffff - bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff; - - // bytes4(keccak256("NotEnoughGasForSupportsInterfaceCall()")) - bytes4 private constant NOT_ENOUGH_GAS_SIG = 0x161c3bf7; + error InsufficientGasForStaticcall(); - /** - * @dev Returns true if `account` supports the {IERC165} interface. - */ + // As per the EIP-165 spec, no interface should ever match 0xffffffff + bytes4 private constant INTERFACE_ID_INVALID = 0xffffffff; + + /// @dev 30k gas is required to make the staticcall. Under the 63/64 rule this means that 30,477 gas must be available + /// to ensure that at least 30k is forwarded. Checking for at least 31,000 ensures that after additional + /// operations are performed there is still >= 30,477 gas remaining. + /// 30,000 = ((30,477 * 63) / 64) + uint256 private constant MINIMUM_GAS_REQUIREMENT = 31_000; + + /// @notice Returns true if `account` supports the {IERC165} interface. + /// @dev Any contract that implements ERC165 must explicitly indicate support of InterfaceId_ERC165 and explicitly + /// indicate non-support of InterfaceId_Invalid as per the standard. + /// @param account the address to be queried for support for ERC165 + /// @return true if the contract at account indicates support for ERC165, false otherwise function _supportsERC165Reverting( address account ) internal view returns (bool) { - // Any contract that implements ERC165 must explicitly indicate support of - // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid return _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId) - && !_supportsERC165InterfaceUncheckedReverting(account, _INTERFACE_ID_INVALID); + && !_supportsERC165InterfaceUncheckedReverting(account, INTERFACE_ID_INVALID); } - /** - * @dev Returns true if `account` supports the interface defined by - * `interfaceId`. Support for {IERC165} itself is queried automatically. - * - * See {IERC165-supportsInterface}. - */ + /// @notice Returns true if `account` supports a defined interface + /// @dev The function must support both the interfaceId and interfaces specified by ERC165 generally as per the standard + /// @param account the contract to be queried for support + /// @param interfaceId the interface being checked for support + /// @return true if the contract at account indicates support of the interface with, false otherwise. function _supportsInterfaceReverting(address account, bytes4 interfaceId) internal view returns (bool) { // query support of both ERC165 as per the spec and support of _interfaceId return _supportsERC165Reverting(account) && _supportsERC165InterfaceUncheckedReverting(account, interfaceId); } - /** - * @dev Returns a boolean array where each value corresponds to the - * interfaces passed in and whether they're supported or not. This allows - * you to batch check interfaces for a contract where your expectation - * is that some interfaces may not be supported. - * - * See {IERC165-supportsInterface}. - * - * _Available since v3.4._ - */ - function _getSupportedInterfacesReverting( - address account, - bytes4[] memory interfaceIds - ) internal view returns (bool[] memory) { - // an array of booleans corresponding to interfaceIds and whether they're supported or not - bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); - - // query support of ERC165 itself - if (_supportsERC165Reverting(account)) { - // query support of each interface in interfaceIds - for (uint256 i = 0; i < interfaceIds.length; i++) { - interfaceIdsSupported[i] = _supportsERC165InterfaceUncheckedReverting(account, interfaceIds[i]); - } - } - - return interfaceIdsSupported; - } - - /** - * @dev Returns true if `account` supports all the interfaces defined in - * `interfaceIds`. Support for {IERC165} itself is queried automatically. - * - * Batch-querying can lead to gas savings by skipping repeated checks for - * {IERC165} support. - * - * See {IERC165-supportsInterface}. - */ - function _supportsAllInterfacesReverting(address account, bytes4[] memory interfaceIds) internal view returns (bool) { - // query support of ERC165 itself - if (!_supportsERC165Reverting(account)) { - return false; - } - - // query support of each interface in interfaceIds - for (uint256 i = 0; i < interfaceIds.length; i++) { - if (!_supportsERC165InterfaceUncheckedReverting(account, interfaceIds[i])) { - return false; - } - } - - // all interfaces supported - return true; - } - - /** - * @notice Query if a contract implements an interface, does not check ERC165 support - * @param account The address of the contract to query for support of an interface - * @param interfaceId The interface identifier, as specified in ERC-165 - * @return true if the contract at account indicates support of the interface with - * identifier interfaceId, false otherwise - * @dev Assumes that account contains a contract that supports ERC165, otherwise - * the behavior of this method is undefined. This precondition can be checked - * with {supportsERC165}. - * - * Some precompiled contracts will falsely indicate support for a given interface, so caution - * should be exercised when using this function. - * - * Interface identification is specified in ERC-165. - */ + /// @notice Query if a contract implements an interface, does not check ERC165 support + /// @param account The address of the contract to query for support of an interface + /// @param interfaceId The interface identifier, as specified in ERC-165 + /// @return true if the contract at account indicates support of the interface with + /// identifier interfaceId, false otherwise + /// @dev Assumes that account contains a contract that supports ERC165, otherwise + /// the behavior of this method is undefined. This precondition can be checked + /// @dev Function will only revert if the minimum gas requirement is not met before the staticcall is performed. function _supportsERC165InterfaceUncheckedReverting(address account, bytes4 interfaceId) internal view returns (bool) { - // prepare call bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); - // perform static call bool success; uint256 returnSize; uint256 returnValue; - assembly { - // Enforce that there's enough gas avilable so that the call will not fail due to OOG error. Without this supportsInterface() may return false when it should return true. + bytes4 notEnoughGasSelector = InsufficientGasForStaticcall.selector; - // 32,000 gas was chosen to ensure enough gas to invoke the staticcall after the check - // without breaking the 63/64 rule. Under EIP-150 there must be at least ~30,476 gas - // remaining before the staticcall. - if lt(gas(), 32000) { - mstore(0x0, NOT_ENOUGH_GAS_SIG) + assembly { + // The EVM does not return a specific error code if a revert is due to OOG. This check ensures that + // the message will not throw an OOG error by requiring that the amount of gas for the following + // staticcall exists before invoking it. + if lt(gas(), MINIMUM_GAS_REQUIREMENT) { + mstore(0x0, notEnoughGasSelector) revert(0x0, 0x4) } diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index db4ace2f436..3e4804b7b4f 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -605,7 +605,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // // The ordering of these checks is important, as the first check is the cheapest to execute. // - // To prevent message delivery bypass issues, a modified version of the ERC165Checker is used exclusively here + // To prevent message delivery bypass issues, a modified version of the ERC165Checker is used // which checks for sufficient gas before making the external call. if ( (message.data.length == 0 && message.gasLimit == 0) || message.receiver.code.length == 0 diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol similarity index 56% rename from contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol rename to contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol index 9036fd9983e..d8fa3bd14c8 100644 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsInterfaceReverting.t.sol +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol @@ -1,14 +1,26 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.24; -import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; +import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver.sol"; -import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; -import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; +import {ERC165CheckerReverting} from "../../libraries/ERC165CheckerReverting.sol"; +import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol"; -contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRevertingSetup { +import {Test} from "forge-std/Test.sol"; + +contract ERC165CheckerReverting_supportsInterfaceReverting is Test { using ERC165CheckerReverting for address; + address internal s_receiver; + + bytes4 internal constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; + + error InsufficientGasForStaticcall(); + + constructor() { + s_receiver = address(new MaybeRevertMessageReceiver(false)); + } + function test__supportsInterfaceReverting() public view { assertTrue(s_receiver._supportsInterfaceReverting(type(IAny2EVMMessageReceiver).interfaceId)); } @@ -16,7 +28,7 @@ contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRever // Reverts function test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() public { - vm.expectRevert(NOT_ENOUGH_GAS_SIG); + vm.expectRevert(InsufficientGasForStaticcall.selector); // Library calls cannot be called with gas limit overrides, so a public function must be exposed // instead which can proxy the call to the library. diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol deleted file mode 100644 index aa3b81b20be..00000000000 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.getSupportedInterfacesReverting.t.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; - -import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; - -import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; -import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; - -contract ERC165CheckerReverting_getSupportedInterfaces is ERC165CheckerRevertingSetup { - using ERC165CheckerReverting for address; - - function test__getSupportedInterfacesReverting() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); - assertTrue(supportedIds[0]); - assertEq(interfaceIds.length, supportedIds.length); - } -} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol deleted file mode 100644 index d443ebfccb8..00000000000 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerReverting.supportsAllInterfacesReverting.t.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; - -import {IAny2EVMMessageReceiver} from "../../../interfaces/IAny2EVMMessageReceiver.sol"; - -import {ERC165CheckerReverting} from "../../../libraries/ERC165CheckerReverting.sol"; -import {ERC165CheckerRevertingSetup} from "./ERC165CheckerRevertingSetup.t.sol"; - -contract ERC165CheckerReverting_supportsInterfaceReverting is ERC165CheckerRevertingSetup { - using ERC165CheckerReverting for address; - - function test__getSupportedInterfacesReverting() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - bool[] memory supportedIds = s_receiver._getSupportedInterfacesReverting(interfaceIds); - assertTrue(supportedIds[0]); - assertEq(interfaceIds.length, supportedIds.length); - } - - function test__supportsAllInterfacesReverting() public view { - bytes4[] memory interfaceIds = new bytes4[](1); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - - assertTrue(s_receiver._supportsAllInterfacesReverting(interfaceIds)); - } - - function test__supportsAllInterfacesReverting_notAllSupported() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - assertFalse(s_receiver._supportsAllInterfacesReverting(interfaceIds)); - } - - // Reverts - - function test__supportsAllInterfacesReverting_notSupportsERC165() public view { - bytes4[] memory interfaceIds = new bytes4[](2); - - interfaceIds[0] = type(IAny2EVMMessageReceiver).interfaceId; - interfaceIds[1] = EXAMPLE_INTERFACE_ID; - - // An address that does not support ERC165 - address randomAddress = address(0xdead); - - assertFalse(randomAddress._supportsAllInterfacesReverting(interfaceIds)); - } -} diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol deleted file mode 100644 index 1a46c602f52..00000000000 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting/ERC165CheckerRevertingSetup.t.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.24; - -import {MaybeRevertMessageReceiver} from "../../helpers/receivers/MaybeRevertMessageReceiver.sol"; - -import {Test} from "forge-std/Test.sol"; - -contract ERC165CheckerRevertingSetup is Test { - address internal s_receiver; - - bytes4 internal constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; - bytes4 internal constant NOT_ENOUGH_GAS_SIG = 0x161c3bf7; - - constructor() { - s_receiver = address(new MaybeRevertMessageReceiver(false)); - } -} From 469b51caf80a87db985b28406ec674d22f983e87 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:19:17 +0000 Subject: [PATCH 12/15] Update gethwrappers --- core/gethwrappers/ccip/generated/offramp/offramp.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 0ddf31f4141..6492fe747f9 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -157,7 +157,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d1f38038062006d1f833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fa462000d7b600039600081816101b001528181610ce801528181612ed101526138240152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fa46000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613ec8565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd9190614036565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614090565b61035361034e366004614131565b6107c6565b6040516102bd919061418e565b61014461036e3660046146f7565b61081b565b610144610381366004614986565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a1a565b610e0d565b61014461012c366004614a7f565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614aca565b610e1e565b6040516102bd9190614b2a565b6104dd6104b5366004614b9f565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c1b565b610f7c565b61051161050c366004614ccd565b61147f565b6040516102bd9190614ce8565b61014461052c366004614cfb565b61158b565b61014461053f366004614d18565b61159c565b610144610552366004614dd3565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613ce8565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613ce8565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f10565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f10565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f26565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f26565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f10565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f76565b60026107e1608085614f9f565b6001600160401b03166107f49190614fc5565b6107fe8585611913565b901c16600381111561081257610812614164565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f10565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f10565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f10565b60200260200101516000015190506000856020015183815181106108fd576108fd614f10565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f10565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f10565b60200260200101516020015182815181106109f6576109f6614f10565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f10565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb908590600401615089565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d9190614036565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f0000000000000000000000000000000000000000000000000000000000000000929160040161509c565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150d8565b509150915081610d7d57806040516302a35ba360e21b815260040161094d9190614036565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a87890189615385565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155ad565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c0565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f10565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156d3565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f0565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157e3565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c906001615808565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261140392909161582f565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f26565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f26565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab82840184615854565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f10565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f10565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f26565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f0565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158d8565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e69190615997565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159e5565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f10565b602002602001015184611a7557858381518110611a6857611a68614f10565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613ce8565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f10565b9050602002016020810190611b209190615a0b565b63ffffffff1615611b8357848482818110611b3d57611b3d614f10565b9050602002016020810190611b529190615a0b565b8b8281518110611b6457611b64614f10565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f10565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f10565b9050602002810190611bc79190615a26565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f10565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a6c565b9050826060015115611e48578451611e19906020614fc5565b8651611e26906020614fc5565b611e319060a0615a6c565b611e3b9190615a6c565b611e459082615a6c565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef6614164565b6002811115611f0757611f07614164565b9052509050600281602001516002811115611f2457611f24614164565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f10565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a7f565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615a98565b60405190819003812061201e918b90602001615aa8565b6040516020818303038152906040528051906020012090506120438a828888886130e4565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615abc565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615abc565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615abc565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b5050505050613297565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a575050505050613297565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615abc565b604086015161232c906003615ad6565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615abc565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615abc565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c6e565b506123b085826001613300565b505b6123be84826002613300565b80516123d39060038501906020840190613c6e565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615af2565b60405180910390a1610d838461345b565b600061081283836134de565b600082600001828154811061246057612460614f10565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156d3565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613ce8565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f0565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f10565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc818461352d565b8483815181106127de576127de614f10565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a60800151613635565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f10565b60200260200101519050600061287e898360000151606001516107c6565b9050600081600381111561289457612894614164565b14806128b1575060038160038111156128af576128af614164565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f10565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f76565b119050808061296f5750600383600381111561296d5761296d614164565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f10565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f10565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa614164565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a614164565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615ba4565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156d3565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f10565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b8560000151606001516001613672565b600080612bac868486613717565b91509150612bc38d87600001516060015184613672565b8b15612c1a576003826003811115612bdd57612bdd614164565b03612c1a576000856003811115612bf657612bf6614164565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd0565b6002826003811115612c2e57612c2e614164565b14612c6f576003826003811115612c4757612c47614164565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615be9565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f10565b602002602001015186865a612cdc908f614f76565b604051612cec9493929190615c0e565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c45565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137cb565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c62565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138ce565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d2e565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d50565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f76565b6137cb565b50905086811080612faf575081612fac8883614f76565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b179052600090818080617d005a10156130a65763161c3bf760e01b60005260046000fd5b602060008551602087018a617530fa92503d915060005190508280156130cd575060208210155b80156130d95750600081115b979650505050505050565b8251600090815b81811015612d0457600060018886846020811061310a5761310a614f10565b61311791901a601b615a7f565b89858151811061312957613129614f10565b602002602001015189868151811061314357613143614f10565b602002602001015160405160008152602001604052604051613181949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131a3573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320457613204614164565b600281111561321557613215614164565b905250905060018160200151600281111561323257613232614164565b1461325057604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561327a57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130eb565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132cc576132cc614f10565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161329a565b60005b82518110156115ff57600083828151811061332057613320614f10565b602002602001015190506000600281111561333d5761333d614164565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561337c5761337c614164565b1461339d576004604051631b3fab5160e11b815260040161094d9190615abc565b6001600160a01b0381166133c45760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133ea576133ea614164565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344757613447614164565b021790555090505050806001019050613303565b60ff818116600081815260026020526040902060010154620100009004909116906134b3578061349e576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359195919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135d49190615e0a565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136438585856139a8565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613681608085614f9f565b6001600160401b03166136949190614fc5565b905060006136a28585611913565b9050816136b160016004614f76565b901b1916818360038111156136c8576136c8614164565b6001600160401b03871660009081526009602052604081209190921b929092179182916136f66080886159e5565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374490889088908890600401615ea1565b600060405180830381600087803b15801561375e57600080fd5b505af192505050801561376f575060015b6137ae573d80801561379d576040519150601f19603f3d011682016040523d82523d6000602084013e6137a2565b606091505b506003925090506137c3565b50506040805160208101909152600081526002905b935093915050565b600080600080600061384a886040516024016137f691906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138ce565b92509250925082613872578682604051634ff17cad60e11b815260040161094d929190615d2e565b60208251146138a1578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138b59190615d50565b6138bf8288614f76565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f0576138f0613ce8565b6040519080825280601f01601f19166020018201604052801561391a576020820181803683370190505b509150863b6139345763030ed58f60e21b60005260046000fd5b5a8581101561394e57632be8ca8b60e21b60005260046000fd5b859003604081048103871061396e576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139915750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d057604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139e457506101018111155b613a01576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a2b576040516309bde33960e01b815260040160405180910390fd5b80600003613a585786600081518110613a4657613a46614f10565b60200260200101519350505050613c26565b6000816001600160401b03811115613a7257613a72613ce8565b604051908082528060200260200182016040528015613a9b578160200160208202803683370190505b50905060008080805b85811015613bc55760006001821b8b811603613aff5788851015613ae8578c5160018601958e918110613ad957613ad9614f10565b60200260200101519050613b21565b8551600185019487918110613ad957613ad9614f10565b8b5160018401938d918110613b1657613b16614f10565b602002602001015190505b600089861015613b51578d5160018701968f918110613b4257613b42614f10565b60200260200101519050613b73565b8651600186019588918110613b6857613b68614f10565b602002602001015190505b82851115613b94576040516309bde33960e01b815260040160405180910390fd5b613b9e8282613c2d565b878481518110613bb057613bb0614f10565b60209081029190910101525050600101613aa4565b506001850382148015613bd757508683145b8015613be257508581145b613bff576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1457613c14614f10565b60200260200101519750505050505050505b9392505050565b6000818310613c4557613c408284613c4b565b610812565b61081283835b604080516001602082015290810183905260608101829052600090608001613617565b828054828255906000526020600020908101928215613cc3579160200282015b82811115613cc357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c8e565b50613ccf929150613cd3565b5090565b5b80821115613ccf5760008155600101613cd4565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2057613d20613ce8565b60405290565b60405160a081016001600160401b0381118282101715613d2057613d20613ce8565b60405160c081016001600160401b0381118282101715613d2057613d20613ce8565b604080519081016001600160401b0381118282101715613d2057613d20613ce8565b604051606081016001600160401b0381118282101715613d2057613d20613ce8565b604051601f8201601f191681016001600160401b0381118282101715613dd657613dd6613ce8565b604052919050565b60006001600160401b03821115613df757613df7613ce8565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e2d57600080fd5b919050565b801515811461056857600080fd5b8035613e2d81613e32565b60006001600160401b03821115613e6457613e64613ce8565b50601f01601f191660200190565b600082601f830112613e8357600080fd5b8135613e96613e9182613e4b565b613dae565b818152846020838601011115613eab57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613edb57600080fd5b82356001600160401b0380821115613ef257600080fd5b818501915085601f830112613f0657600080fd5b8135613f14613e9182613dde565b81815260059190911b83018401908481019088831115613f3357600080fd5b8585015b83811015613fd957803585811115613f4f5760008081fd5b86016080818c03601f1901811315613f675760008081fd5b613f6f613cfe565b89830135613f7c81613e01565b81526040613f8b848201613e16565b8b830152606080850135613f9e81613e32565b83830152928401359289841115613fb757600091508182fd5b613fc58f8d86880101613e72565b908301525085525050918601918601613f37565b5098975050505050505050565b60005b83811015614001578181015183820152602001613fe9565b50506000910152565b60008151808452614022816020860160208601613fe6565b601f01601f19169290920160200192915050565b602081526000610812602083018461400a565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261366a608085018261400a565b604080825283519082018190526000906020906060840190828701845b828110156140d25781516001600160401b0316845292840192908401906001016140ad565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412257601f19868403018552614110838351614049565b948701949250908601906001016140f4565b50909998505050505050505050565b6000806040838503121561414457600080fd5b61414d83613e16565b915061415b60208401613e16565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061418a5761418a614164565b9052565b60208101610815828461417a565b600060a082840312156141ae57600080fd5b6141b6613d26565b9050813581526141c860208301613e16565b60208201526141d960408301613e16565b60408201526141ea60608301613e16565b60608201526141fb60808301613e16565b608082015292915050565b8035613e2d81613e01565b803563ffffffff81168114613e2d57600080fd5b600082601f83011261423657600080fd5b81356020614246613e9183613dde565b82815260059290921b8401810191818101908684111561426557600080fd5b8286015b848110156143355780356001600160401b03808211156142895760008081fd5b9088019060a0828b03601f19018113156142a35760008081fd5b6142ab613d26565b87840135838111156142bd5760008081fd5b6142cb8d8a83880101613e72565b8252506040808501356142dd81613e01565b828a015260606142ee868201614211565b828401526080915081860135858111156143085760008081fd5b6143168f8c838a0101613e72565b9184019190915250919093013590830152508352918301918301614269565b509695505050505050565b6000610140828403121561435357600080fd5b61435b613d48565b9050614367838361419c565b815260a08201356001600160401b038082111561438357600080fd5b61438f85838601613e72565b602084015260c08401359150808211156143a857600080fd5b6143b485838601613e72565b60408401526143c560e08501614206565b606084015261010084013560808401526101208401359150808211156143ea57600080fd5b506143f784828501614225565b60a08301525092915050565b600082601f83011261441457600080fd5b81356020614424613e9183613dde565b82815260059290921b8401810191818101908684111561444357600080fd5b8286015b848110156143355780356001600160401b038111156144665760008081fd5b6144748986838b0101614340565b845250918301918301614447565b600082601f83011261449357600080fd5b813560206144a3613e9183613dde565b82815260059290921b840181019181810190868411156144c257600080fd5b8286015b848110156143355780356001600160401b03808211156144e557600080fd5b818901915089603f8301126144f957600080fd5b85820135614509613e9182613dde565b81815260059190911b830160400190878101908c83111561452957600080fd5b604085015b838110156145625780358581111561454557600080fd5b6145548f6040838a0101613e72565b84525091890191890161452e565b508752505050928401925083016144c6565b600082601f83011261458557600080fd5b81356020614595613e9183613dde565b8083825260208201915060208460051b8701019350868411156145b757600080fd5b602086015b8481101561433557803583529183019183016145bc565b600082601f8301126145e457600080fd5b813560206145f4613e9183613dde565b82815260059290921b8401810191818101908684111561461357600080fd5b8286015b848110156143355780356001600160401b03808211156146375760008081fd5b9088019060a0828b03601f19018113156146515760008081fd5b614659613d26565b614664888501613e16565b81526040808501358481111561467a5760008081fd5b6146888e8b83890101614403565b8a84015250606080860135858111156146a15760008081fd5b6146af8f8c838a0101614482565b83850152506080915081860135858111156146ca5760008081fd5b6146d88f8c838a0101614574565b9184019190915250919093013590830152508352918301918301614617565b6000806040838503121561470a57600080fd5b6001600160401b038335111561471f57600080fd5b61472c84843585016145d3565b91506001600160401b036020840135111561474657600080fd5b6020830135830184601f82011261475c57600080fd5b614769613e918235613dde565b81358082526020808301929160051b84010187101561478757600080fd5b602083015b6020843560051b85010181101561492d576001600160401b03813511156147b257600080fd5b87603f8235860101126147c457600080fd5b6147d7613e916020833587010135613dde565b81358501602081810135808452908301929160059190911b016040018a10156147ff57600080fd5b604083358701015b83358701602081013560051b0160400181101561491d576001600160401b038135111561483357600080fd5b833587018135016040818d03603f1901121561484e57600080fd5b614856613d6a565b604082013581526001600160401b036060830135111561487557600080fd5b8c605f60608401358401011261488a57600080fd5b60406060830135830101356148a1613e9182613dde565b808282526020820191508f60608460051b60608801358801010111156148c657600080fd5b6060808601358601015b60608460051b6060880135880101018110156148fd576148ef81614211565b8352602092830192016148d0565b508060208501525050508085525050602083019250602081019050614807565b508452506020928301920161478c565b508093505050509250929050565b60008083601f84011261494d57600080fd5b5081356001600160401b0381111561496457600080fd5b6020830191508360208260051b850101111561497f57600080fd5b9250929050565b60008060008060006060868803121561499e57600080fd5b85356001600160401b03808211156149b557600080fd5b6149c189838a01614340565b965060208801359150808211156149d757600080fd5b6149e389838a0161493b565b909650945060408801359150808211156149fc57600080fd5b50614a098882890161493b565b969995985093965092949392505050565b600060808284031215614a2c57600080fd5b614a34613cfe565b8235614a3f81613e01565b8152614a4d60208401614211565b60208201526040830135614a6081613e32565b60408201526060830135614a7381613e01565b60608201529392505050565b600060208284031215614a9157600080fd5b81356001600160401b03811115614aa757600080fd5b820160a08185031215613c2657600080fd5b803560ff81168114613e2d57600080fd5b600060208284031215614adc57600080fd5b61081282614ab9565b60008151808452602080850194506020840160005b83811015614b1f5781516001600160a01b031687529582019590820190600101614afa565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b7960e0840182614ae5565b90506040840151601f198483030160c0850152614b968282614ae5565b95945050505050565b60008060408385031215614bb257600080fd5b614bbb83613e16565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bec57600080fd5b5081356001600160401b03811115614c0357600080fd5b60208301915083602082850101111561497f57600080fd5b60008060008060008060008060c0898b031215614c3757600080fd5b614c418a8a614bc9565b975060408901356001600160401b0380821115614c5d57600080fd5b614c698c838d01614bda565b909950975060608b0135915080821115614c8257600080fd5b614c8e8c838d0161493b565b909750955060808b0135915080821115614ca757600080fd5b50614cb48b828c0161493b565b999c989b50969995989497949560a00135949350505050565b600060208284031215614cdf57600080fd5b61081282613e16565b6020815260006108126020830184614049565b600060208284031215614d0d57600080fd5b8135613c2681613e01565b600080600060608486031215614d2d57600080fd5b614d378585614bc9565b925060408401356001600160401b03811115614d5257600080fd5b614d5e86828701614bda565b9497909650939450505050565b600082601f830112614d7c57600080fd5b81356020614d8c613e9183613dde565b8083825260208201915060208460051b870101935086841115614dae57600080fd5b602086015b84811015614335578035614dc681613e01565b8352918301918301614db3565b60006020808385031215614de657600080fd5b82356001600160401b0380821115614dfd57600080fd5b818501915085601f830112614e1157600080fd5b8135614e1f613e9182613dde565b81815260059190911b83018401908481019088831115614e3e57600080fd5b8585015b83811015613fd957803585811115614e5957600080fd5b860160c0818c03601f19011215614e705760008081fd5b614e78613d48565b8882013581526040614e8b818401614ab9565b8a8301526060614e9c818501614ab9565b8284015260809150614eaf828501613e40565b9083015260a08381013589811115614ec75760008081fd5b614ed58f8d83880101614d6b565b838501525060c0840135915088821115614eef5760008081fd5b614efd8e8c84870101614d6b565b9083015250845250918601918601614e42565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f3a57607f821691505b602082108103614f5a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f60565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fb957614fb9614f89565b92169190910692915050565b808202811582820484141761081557610815614f60565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261500f60a087018261400a565b905060608501518682036060880152615028828261400a565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561507d57835180516001600160a01b031683528601518683015292850192600192909201919084019061504b565b50979650505050505050565b6020815260006108126020830184614fdc565b6080815260006150af6080830187614fdc565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150ed57600080fd5b83516150f881613e32565b60208501519093506001600160401b0381111561511457600080fd5b8401601f8101861361512557600080fd5b8051615133613e9182613e4b565b81815287602083850101111561514857600080fd5b615159826020830160208601613fe6565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e2d57600080fd5b600082601f83011261519557600080fd5b813560206151a5613e9183613dde565b82815260069290921b840181019181810190868411156151c457600080fd5b8286015b8481101561433557604081890312156151e15760008081fd5b6151e9613d6a565b6151f282613e16565b81526151ff85830161516d565b818601528352918301916040016151c8565b600082601f83011261522257600080fd5b81356020615232613e9183613dde565b82815260059290921b8401810191818101908684111561525157600080fd5b8286015b848110156143355780356001600160401b03808211156152755760008081fd5b9088019060a0828b03601f190181131561528f5760008081fd5b615297613d26565b6152a2888501613e16565b8152604080850135848111156152b85760008081fd5b6152c68e8b83890101613e72565b8a84015250606093506152da848601613e16565b9082015260806152eb858201613e16565b93820193909352920135908201528352918301918301615255565b600082601f83011261531757600080fd5b81356020615327613e9183613dde565b82815260069290921b8401810191818101908684111561534657600080fd5b8286015b8481101561433557604081890312156153635760008081fd5b61536b613d6a565b81358152848201358582015283529183019160400161534a565b6000602080838503121561539857600080fd5b82356001600160401b03808211156153af57600080fd5b90840190606082870312156153c357600080fd5b6153cb613d8c565b8235828111156153da57600080fd5b830160408189038113156153ed57600080fd5b6153f5613d6a565b82358581111561540457600080fd5b8301601f81018b1361541557600080fd5b8035615423613e9182613dde565b81815260069190911b8201890190898101908d83111561544257600080fd5b928a01925b828410156154925785848f03121561545f5760008081fd5b615467613d6a565b843561547281613e01565b815261547f858d0161516d565b818d0152825292850192908a0190615447565b8452505050828701359150848211156154aa57600080fd5b6154b68a838501615184565b818801528352505082840135828111156154cf57600080fd5b6154db88828601615211565b858301525060408301359350818411156154f457600080fd5b61550087858501615306565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a057601f19868403018952815160a06001600160401b038083511686528683015182888801526155648388018261400a565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161552c565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d0606084018661550f565b83810360408581019190915285518083528387019284019060005b81811015614122578451805184528601518684015293850193918301916001016155eb565b805160408084528151848201819052600092602091908201906060870190855b8181101561566757835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615630565b50508583015187820388850152805180835290840192506000918401905b8083101561507d57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615685565b6020815260006108126020830184615610565b6000602082840312156156e557600080fd5b8151613c2681613e32565b60008083546156fe81614f26565b60018281168015615716576001811461572b5761575a565b60ff198416875282151583028701945061575a565b8760005260208060002060005b858110156157515781548a820152908401908201615738565b50505082870194505b50929695505050505050565b6000815461577381614f26565b80855260206001838116801561579057600181146157aa576157d8565b60ff1985168884015283151560051b8801830195506157d8565b866000528260002060005b858110156157d05781548a82018601529083019084016157b5565b890184019650505b505050505092915050565b6040815260006157f6604083018561400a565b8281036020840152614b968185615766565b6001600160401b0381811683821601908082111561582857615828614f60565b5092915050565b604081526000615842604083018561550f565b8281036020840152614b968185615610565b60006020828403121561586657600080fd5b81356001600160401b0381111561587c57600080fd5b61366a848285016145d3565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b15750805b601f850160051c820191505b818110156158d0578281556001016158bd565b505050505050565b81516001600160401b038111156158f1576158f1613ce8565b615905816158ff8454614f26565b84615888565b602080601f83116001811461593a57600084156159225750858301515b600019600386901b1c1916600185901b1785556158d0565b600085815260208120601f198616915b828110156159695788860151825594840194600190910190840161594a565b50858210156159875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a0830160018501615766565b60006001600160401b03808416806159ff576159ff614f89565b92169190910492915050565b600060208284031215615a1d57600080fd5b61081282614211565b6000808335601e19843603018112615a3d57600080fd5b8301803591506001600160401b03821115615a5757600080fd5b60200191503681900382131561497f57600080fd5b8082018082111561081557610815614f60565b60ff818116838216019081111561081557610815614f60565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad057615ad0614164565b91905290565b60ff818116838216029081169081811461582857615828614f60565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b4a5784546001600160a01b031683526001948501949284019201615b25565b50508481036060860152865180825290820192508187019060005b81811015615b8a5782516001600160a01b031685529383019391830191600101615b65565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b96606083018461400a565b82815260406020820152600061366a604083018461400a565b6001600160401b038481168252831660208201526060810161366a604083018461417a565b848152615c1e602082018561417a565b608060408201526000615c34608083018561400a565b905082606083015295945050505050565b600060208284031215615c5757600080fd5b8151613c2681613e01565b6020815260008251610100806020850152615c8161012085018361400a565b91506020850151615c9d60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cd760a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cf4848361400a565b935060c08701519150808685030160e0870152615d11848361400a565b935060e0870151915080868503018387015250615b9a838261400a565b6001600160a01b038316815260406020820152600061366a604083018461400a565b600060208284031215615d6257600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a057601f19868403018952815160a08151818652615dac8287018261400a565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615de8838261400a565b6080948501519790940196909652505098840198925090830190600101615d86565b6020815260006108126020830184615d69565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a057601f19868403018952615e5883835161400a565b98840198925090830190600101615e3c565b60008151808452602080850194506020840160005b83811015614b1f57815163ffffffff1687529582019590820190600101615e7f565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f096101a085018361400a565b91506040870151605f198086850301610120870152615f28848361400a565b935060608901519150615f45838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f6e8282615d69565b9150508281036020840152615f838186615e1d565b90508281036040840152615b9a8185615e6a56fea164736f6c6343000818000a", + Bin: "0x6101406040523480156200001257600080fd5b5060405162006d2138038062006d21833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fa662000d7b600039600081816101b001528181610ce801528181612ed101526138260152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fa66000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613eca565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd9190614038565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614092565b61035361034e366004614133565b6107c6565b6040516102bd9190614190565b61014461036e3660046146f9565b61081b565b610144610381366004614988565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a1c565b610e0d565b61014461012c366004614a81565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614acc565b610e1e565b6040516102bd9190614b2c565b6104dd6104b5366004614ba1565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c1d565b610f7c565b61051161050c366004614ccf565b61147f565b6040516102bd9190614cea565b61014461052c366004614cfd565b61158b565b61014461053f366004614d1a565b61159c565b610144610552366004614dd5565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613cea565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613cea565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f12565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f12565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f28565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f28565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f12565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f78565b60026107e1608085614fa1565b6001600160401b03166107f49190614fc7565b6107fe8585611913565b901c16600381111561081257610812614166565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f12565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f12565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f12565b60200260200101516000015190506000856020015183815181106108fd576108fd614f12565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f12565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f12565b60200260200101516020015182815181106109f6576109f6614f12565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f12565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb90859060040161508b565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d9190614038565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f0000000000000000000000000000000000000000000000000000000000000000929160040161509e565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150da565b509150915081610d7d57806040516302a35ba360e21b815260040161094d9190614038565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a87890189615387565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155af565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c2565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f12565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156d5565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f2565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157e5565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c90600161580a565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615831565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f28565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f28565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab82840184615856565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f12565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f12565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f28565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f2565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158da565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e69190615999565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159e7565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f12565b602002602001015184611a7557858381518110611a6857611a68614f12565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613cea565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f12565b9050602002016020810190611b209190615a0d565b63ffffffff1615611b8357848482818110611b3d57611b3d614f12565b9050602002016020810190611b529190615a0d565b8b8281518110611b6457611b64614f12565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f12565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f12565b9050602002810190611bc79190615a28565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f12565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a6e565b9050826060015115611e48578451611e19906020614fc7565b8651611e26906020614fc7565b611e319060a0615a6e565b611e3b9190615a6e565b611e459082615a6e565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef6614166565b6002811115611f0757611f07614166565b9052509050600281602001516002811115611f2457611f24614166565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f12565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a81565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615a9a565b60405190819003812061201e918b90602001615aaa565b6040516020818303038152906040528051906020012090506120438a828888886130e6565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615abe565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615abe565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615abe565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b5050505050613299565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a575050505050613299565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615abe565b604086015161232c906003615ad8565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615abe565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615abe565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c70565b506123b085826001613302565b505b6123be84826002613302565b80516123d39060038501906020840190613c70565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615af4565b60405180910390a1610d838461345d565b600061081283836134e0565b600082600001828154811061246057612460614f12565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156d5565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613cea565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f2565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f12565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc818461352f565b8483815181106127de576127de614f12565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a60800151613637565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f12565b60200260200101519050600061287e898360000151606001516107c6565b9050600081600381111561289457612894614166565b14806128b1575060038160038111156128af576128af614166565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f12565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f78565b119050808061296f5750600383600381111561296d5761296d614166565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f12565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f12565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa614166565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a614166565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615ba6565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156d5565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f12565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b8560000151606001516001613674565b600080612bac868486613719565b91509150612bc38d87600001516060015184613674565b8b15612c1a576003826003811115612bdd57612bdd614166565b03612c1a576000856003811115612bf657612bf6614166565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd2565b6002826003811115612c2e57612c2e614166565b14612c6f576003826003811115612c4757612c47614166565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615beb565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f12565b602002602001015186865a612cdc908f614f78565b604051612cec9493929190615c10565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c47565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137cd565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c64565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138d0565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d30565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d52565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f78565b6137cd565b50905086811080612faf575081612fac8883614f78565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b179052600090818080635c791e1560e11b6179185a10156130a7578060005260046000fd5b602060008651602088018b617530fa93503d925060005191508380156130ce575060208310155b80156130da5750600082115b98975050505050505050565b8251600090815b81811015612d0457600060018886846020811061310c5761310c614f12565b61311991901a601b615a81565b89858151811061312b5761312b614f12565b602002602001015189868151811061314557613145614f12565b602002602001015160405160008152602001604052604051613183949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131a5573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320657613206614166565b600281111561321757613217614166565b905250905060018160200151600281111561323457613234614166565b1461325257604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561327c57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130ed565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132ce576132ce614f12565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161329c565b60005b82518110156115ff57600083828151811061332257613322614f12565b602002602001015190506000600281111561333f5761333f614166565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561337e5761337e614166565b1461339f576004604051631b3fab5160e11b815260040161094d9190615abe565b6001600160a01b0381166133c65760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133ec576133ec614166565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344957613449614166565b021790555090505050806001019050613305565b60ff818116600081815260026020526040902060010154620100009004909116906134b557806134a0576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359395919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135d69190615e0c565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136458585856139aa565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613683608085614fa1565b6001600160401b03166136969190614fc7565b905060006136a48585611913565b9050816136b360016004614f78565b901b1916818360038111156136ca576136ca614166565b6001600160401b03871660009081526009602052604081209190921b929092179182916136f86080886159e7565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374690889088908890600401615ea3565b600060405180830381600087803b15801561376057600080fd5b505af1925050508015613771575060015b6137b0573d80801561379f576040519150601f19603f3d011682016040523d82523d6000602084013e6137a4565b606091505b506003925090506137c5565b50506040805160208101909152600081526002905b935093915050565b600080600080600061384c886040516024016137f891906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138d0565b92509250925082613874578682604051634ff17cad60e11b815260040161094d929190615d30565b60208251146138a3578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138b79190615d52565b6138c18288614f78565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f2576138f2613cea565b6040519080825280601f01601f19166020018201604052801561391c576020820181803683370190505b509150863b6139365763030ed58f60e21b60005260046000fd5b5a8581101561395057632be8ca8b60e21b60005260046000fd5b8590036040810481038710613970576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139935750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d257604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139e657506101018111155b613a03576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a2d576040516309bde33960e01b815260040160405180910390fd5b80600003613a5a5786600081518110613a4857613a48614f12565b60200260200101519350505050613c28565b6000816001600160401b03811115613a7457613a74613cea565b604051908082528060200260200182016040528015613a9d578160200160208202803683370190505b50905060008080805b85811015613bc75760006001821b8b811603613b015788851015613aea578c5160018601958e918110613adb57613adb614f12565b60200260200101519050613b23565b8551600185019487918110613adb57613adb614f12565b8b5160018401938d918110613b1857613b18614f12565b602002602001015190505b600089861015613b53578d5160018701968f918110613b4457613b44614f12565b60200260200101519050613b75565b8651600186019588918110613b6a57613b6a614f12565b602002602001015190505b82851115613b96576040516309bde33960e01b815260040160405180910390fd5b613ba08282613c2f565b878481518110613bb257613bb2614f12565b60209081029190910101525050600101613aa6565b506001850382148015613bd957508683145b8015613be457508581145b613c01576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1657613c16614f12565b60200260200101519750505050505050505b9392505050565b6000818310613c4757613c428284613c4d565b610812565b61081283835b604080516001602082015290810183905260608101829052600090608001613619565b828054828255906000526020600020908101928215613cc5579160200282015b82811115613cc557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c90565b50613cd1929150613cd5565b5090565b5b80821115613cd15760008155600101613cd6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2257613d22613cea565b60405290565b60405160a081016001600160401b0381118282101715613d2257613d22613cea565b60405160c081016001600160401b0381118282101715613d2257613d22613cea565b604080519081016001600160401b0381118282101715613d2257613d22613cea565b604051606081016001600160401b0381118282101715613d2257613d22613cea565b604051601f8201601f191681016001600160401b0381118282101715613dd857613dd8613cea565b604052919050565b60006001600160401b03821115613df957613df9613cea565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e2f57600080fd5b919050565b801515811461056857600080fd5b8035613e2f81613e34565b60006001600160401b03821115613e6657613e66613cea565b50601f01601f191660200190565b600082601f830112613e8557600080fd5b8135613e98613e9382613e4d565b613db0565b818152846020838601011115613ead57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613edd57600080fd5b82356001600160401b0380821115613ef457600080fd5b818501915085601f830112613f0857600080fd5b8135613f16613e9382613de0565b81815260059190911b83018401908481019088831115613f3557600080fd5b8585015b83811015613fdb57803585811115613f515760008081fd5b86016080818c03601f1901811315613f695760008081fd5b613f71613d00565b89830135613f7e81613e03565b81526040613f8d848201613e18565b8b830152606080850135613fa081613e34565b83830152928401359289841115613fb957600091508182fd5b613fc78f8d86880101613e74565b908301525085525050918601918601613f39565b5098975050505050505050565b60005b83811015614003578181015183820152602001613feb565b50506000910152565b60008151808452614024816020860160208601613fe8565b601f01601f19169290920160200192915050565b602081526000610812602083018461400c565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261366c608085018261400c565b604080825283519082018190526000906020906060840190828701845b828110156140d45781516001600160401b0316845292840192908401906001016140af565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412457601f1986840301855261411283835161404b565b948701949250908601906001016140f6565b50909998505050505050505050565b6000806040838503121561414657600080fd5b61414f83613e18565b915061415d60208401613e18565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061418c5761418c614166565b9052565b60208101610815828461417c565b600060a082840312156141b057600080fd5b6141b8613d28565b9050813581526141ca60208301613e18565b60208201526141db60408301613e18565b60408201526141ec60608301613e18565b60608201526141fd60808301613e18565b608082015292915050565b8035613e2f81613e03565b803563ffffffff81168114613e2f57600080fd5b600082601f83011261423857600080fd5b81356020614248613e9383613de0565b82815260059290921b8401810191818101908684111561426757600080fd5b8286015b848110156143375780356001600160401b038082111561428b5760008081fd5b9088019060a0828b03601f19018113156142a55760008081fd5b6142ad613d28565b87840135838111156142bf5760008081fd5b6142cd8d8a83880101613e74565b8252506040808501356142df81613e03565b828a015260606142f0868201614213565b8284015260809150818601358581111561430a5760008081fd5b6143188f8c838a0101613e74565b918401919091525091909301359083015250835291830191830161426b565b509695505050505050565b6000610140828403121561435557600080fd5b61435d613d4a565b9050614369838361419e565b815260a08201356001600160401b038082111561438557600080fd5b61439185838601613e74565b602084015260c08401359150808211156143aa57600080fd5b6143b685838601613e74565b60408401526143c760e08501614208565b606084015261010084013560808401526101208401359150808211156143ec57600080fd5b506143f984828501614227565b60a08301525092915050565b600082601f83011261441657600080fd5b81356020614426613e9383613de0565b82815260059290921b8401810191818101908684111561444557600080fd5b8286015b848110156143375780356001600160401b038111156144685760008081fd5b6144768986838b0101614342565b845250918301918301614449565b600082601f83011261449557600080fd5b813560206144a5613e9383613de0565b82815260059290921b840181019181810190868411156144c457600080fd5b8286015b848110156143375780356001600160401b03808211156144e757600080fd5b818901915089603f8301126144fb57600080fd5b8582013561450b613e9382613de0565b81815260059190911b830160400190878101908c83111561452b57600080fd5b604085015b838110156145645780358581111561454757600080fd5b6145568f6040838a0101613e74565b845250918901918901614530565b508752505050928401925083016144c8565b600082601f83011261458757600080fd5b81356020614597613e9383613de0565b8083825260208201915060208460051b8701019350868411156145b957600080fd5b602086015b8481101561433757803583529183019183016145be565b600082601f8301126145e657600080fd5b813560206145f6613e9383613de0565b82815260059290921b8401810191818101908684111561461557600080fd5b8286015b848110156143375780356001600160401b03808211156146395760008081fd5b9088019060a0828b03601f19018113156146535760008081fd5b61465b613d28565b614666888501613e18565b81526040808501358481111561467c5760008081fd5b61468a8e8b83890101614405565b8a84015250606080860135858111156146a35760008081fd5b6146b18f8c838a0101614484565b83850152506080915081860135858111156146cc5760008081fd5b6146da8f8c838a0101614576565b9184019190915250919093013590830152508352918301918301614619565b6000806040838503121561470c57600080fd5b6001600160401b038335111561472157600080fd5b61472e84843585016145d5565b91506001600160401b036020840135111561474857600080fd5b6020830135830184601f82011261475e57600080fd5b61476b613e938235613de0565b81358082526020808301929160051b84010187101561478957600080fd5b602083015b6020843560051b85010181101561492f576001600160401b03813511156147b457600080fd5b87603f8235860101126147c657600080fd5b6147d9613e936020833587010135613de0565b81358501602081810135808452908301929160059190911b016040018a101561480157600080fd5b604083358701015b83358701602081013560051b0160400181101561491f576001600160401b038135111561483557600080fd5b833587018135016040818d03603f1901121561485057600080fd5b614858613d6c565b604082013581526001600160401b036060830135111561487757600080fd5b8c605f60608401358401011261488c57600080fd5b60406060830135830101356148a3613e9382613de0565b808282526020820191508f60608460051b60608801358801010111156148c857600080fd5b6060808601358601015b60608460051b6060880135880101018110156148ff576148f181614213565b8352602092830192016148d2565b508060208501525050508085525050602083019250602081019050614809565b508452506020928301920161478e565b508093505050509250929050565b60008083601f84011261494f57600080fd5b5081356001600160401b0381111561496657600080fd5b6020830191508360208260051b850101111561498157600080fd5b9250929050565b6000806000806000606086880312156149a057600080fd5b85356001600160401b03808211156149b757600080fd5b6149c389838a01614342565b965060208801359150808211156149d957600080fd5b6149e589838a0161493d565b909650945060408801359150808211156149fe57600080fd5b50614a0b8882890161493d565b969995985093965092949392505050565b600060808284031215614a2e57600080fd5b614a36613d00565b8235614a4181613e03565b8152614a4f60208401614213565b60208201526040830135614a6281613e34565b60408201526060830135614a7581613e03565b60608201529392505050565b600060208284031215614a9357600080fd5b81356001600160401b03811115614aa957600080fd5b820160a08185031215613c2857600080fd5b803560ff81168114613e2f57600080fd5b600060208284031215614ade57600080fd5b61081282614abb565b60008151808452602080850194506020840160005b83811015614b215781516001600160a01b031687529582019590820190600101614afc565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b7b60e0840182614ae7565b90506040840151601f198483030160c0850152614b988282614ae7565b95945050505050565b60008060408385031215614bb457600080fd5b614bbd83613e18565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bee57600080fd5b5081356001600160401b03811115614c0557600080fd5b60208301915083602082850101111561498157600080fd5b60008060008060008060008060c0898b031215614c3957600080fd5b614c438a8a614bcb565b975060408901356001600160401b0380821115614c5f57600080fd5b614c6b8c838d01614bdc565b909950975060608b0135915080821115614c8457600080fd5b614c908c838d0161493d565b909750955060808b0135915080821115614ca957600080fd5b50614cb68b828c0161493d565b999c989b50969995989497949560a00135949350505050565b600060208284031215614ce157600080fd5b61081282613e18565b602081526000610812602083018461404b565b600060208284031215614d0f57600080fd5b8135613c2881613e03565b600080600060608486031215614d2f57600080fd5b614d398585614bcb565b925060408401356001600160401b03811115614d5457600080fd5b614d6086828701614bdc565b9497909650939450505050565b600082601f830112614d7e57600080fd5b81356020614d8e613e9383613de0565b8083825260208201915060208460051b870101935086841115614db057600080fd5b602086015b84811015614337578035614dc881613e03565b8352918301918301614db5565b60006020808385031215614de857600080fd5b82356001600160401b0380821115614dff57600080fd5b818501915085601f830112614e1357600080fd5b8135614e21613e9382613de0565b81815260059190911b83018401908481019088831115614e4057600080fd5b8585015b83811015613fdb57803585811115614e5b57600080fd5b860160c0818c03601f19011215614e725760008081fd5b614e7a613d4a565b8882013581526040614e8d818401614abb565b8a8301526060614e9e818501614abb565b8284015260809150614eb1828501613e42565b9083015260a08381013589811115614ec95760008081fd5b614ed78f8d83880101614d6d565b838501525060c0840135915088821115614ef15760008081fd5b614eff8e8c84870101614d6d565b9083015250845250918601918601614e44565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f3c57607f821691505b602082108103614f5c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f62565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fbb57614fbb614f8b565b92169190910692915050565b808202811582820484141761081557610815614f62565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261501160a087018261400c565b90506060850151868203606088015261502a828261400c565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561507f57835180516001600160a01b031683528601518683015292850192600192909201919084019061504d565b50979650505050505050565b6020815260006108126020830184614fde565b6080815260006150b16080830187614fde565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150ef57600080fd5b83516150fa81613e34565b60208501519093506001600160401b0381111561511657600080fd5b8401601f8101861361512757600080fd5b8051615135613e9382613e4d565b81815287602083850101111561514a57600080fd5b61515b826020830160208601613fe8565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e2f57600080fd5b600082601f83011261519757600080fd5b813560206151a7613e9383613de0565b82815260069290921b840181019181810190868411156151c657600080fd5b8286015b8481101561433757604081890312156151e35760008081fd5b6151eb613d6c565b6151f482613e18565b815261520185830161516f565b818601528352918301916040016151ca565b600082601f83011261522457600080fd5b81356020615234613e9383613de0565b82815260059290921b8401810191818101908684111561525357600080fd5b8286015b848110156143375780356001600160401b03808211156152775760008081fd5b9088019060a0828b03601f19018113156152915760008081fd5b615299613d28565b6152a4888501613e18565b8152604080850135848111156152ba5760008081fd5b6152c88e8b83890101613e74565b8a84015250606093506152dc848601613e18565b9082015260806152ed858201613e18565b93820193909352920135908201528352918301918301615257565b600082601f83011261531957600080fd5b81356020615329613e9383613de0565b82815260069290921b8401810191818101908684111561534857600080fd5b8286015b8481101561433757604081890312156153655760008081fd5b61536d613d6c565b81358152848201358582015283529183019160400161534c565b6000602080838503121561539a57600080fd5b82356001600160401b03808211156153b157600080fd5b90840190606082870312156153c557600080fd5b6153cd613d8e565b8235828111156153dc57600080fd5b830160408189038113156153ef57600080fd5b6153f7613d6c565b82358581111561540657600080fd5b8301601f81018b1361541757600080fd5b8035615425613e9382613de0565b81815260069190911b8201890190898101908d83111561544457600080fd5b928a01925b828410156154945785848f0312156154615760008081fd5b615469613d6c565b843561547481613e03565b8152615481858d0161516f565b818d0152825292850192908a0190615449565b8452505050828701359150848211156154ac57600080fd5b6154b88a838501615186565b818801528352505082840135828111156154d157600080fd5b6154dd88828601615213565b858301525060408301359350818411156154f657600080fd5b61550287858501615308565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a257601f19868403018952815160a06001600160401b038083511686528683015182888801526155668388018261400c565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161552e565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d26060840186615511565b83810360408581019190915285518083528387019284019060005b81811015614124578451805184528601518684015293850193918301916001016155ed565b805160408084528151848201819052600092602091908201906060870190855b8181101561566957835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615632565b50508583015187820388850152805180835290840192506000918401905b8083101561507f57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615687565b6020815260006108126020830184615612565b6000602082840312156156e757600080fd5b8151613c2881613e34565b600080835461570081614f28565b60018281168015615718576001811461572d5761575c565b60ff198416875282151583028701945061575c565b8760005260208060002060005b858110156157535781548a82015290840190820161573a565b50505082870194505b50929695505050505050565b6000815461577581614f28565b80855260206001838116801561579257600181146157ac576157da565b60ff1985168884015283151560051b8801830195506157da565b866000528260002060005b858110156157d25781548a82018601529083019084016157b7565b890184019650505b505050505092915050565b6040815260006157f8604083018561400c565b8281036020840152614b988185615768565b6001600160401b0381811683821601908082111561582a5761582a614f62565b5092915050565b6040815260006158446040830185615511565b8281036020840152614b988185615612565b60006020828403121561586857600080fd5b81356001600160401b0381111561587e57600080fd5b61366c848285016145d5565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b35750805b601f850160051c820191505b818110156158d2578281556001016158bf565b505050505050565b81516001600160401b038111156158f3576158f3613cea565b615907816159018454614f28565b8461588a565b602080601f83116001811461593c57600084156159245750858301515b600019600386901b1c1916600185901b1785556158d2565b600085815260208120601f198616915b8281101561596b5788860151825594840194600190910190840161594c565b50858210156159895787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a0830160018501615768565b60006001600160401b0380841680615a0157615a01614f8b565b92169190910492915050565b600060208284031215615a1f57600080fd5b61081282614213565b6000808335601e19843603018112615a3f57600080fd5b8301803591506001600160401b03821115615a5957600080fd5b60200191503681900382131561498157600080fd5b8082018082111561081557610815614f62565b60ff818116838216019081111561081557610815614f62565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad257615ad2614166565b91905290565b60ff818116838216029081169081811461582a5761582a614f62565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b4c5784546001600160a01b031683526001948501949284019201615b27565b50508481036060860152865180825290820192508187019060005b81811015615b8c5782516001600160a01b031685529383019391830191600101615b67565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b98606083018461400c565b82815260406020820152600061366c604083018461400c565b6001600160401b038481168252831660208201526060810161366c604083018461417c565b848152615c20602082018561417c565b608060408201526000615c36608083018561400c565b905082606083015295945050505050565b600060208284031215615c5957600080fd5b8151613c2881613e03565b6020815260008251610100806020850152615c8361012085018361400c565b91506020850151615c9f60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cd960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cf6848361400c565b935060c08701519150808685030160e0870152615d13848361400c565b935060e0870151915080868503018387015250615b9c838261400c565b6001600160a01b038316815260406020820152600061366c604083018461400c565b600060208284031215615d6457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a257601f19868403018952815160a08151818652615dae8287018261400c565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615dea838261400c565b6080948501519790940196909652505098840198925090830190600101615d88565b6020815260006108126020830184615d6b565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a257601f19868403018952615e5a83835161400c565b98840198925090830190600101615e3e565b60008151808452602080850194506020840160005b83811015614b2157815163ffffffff1687529582019590820190600101615e81565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f0b6101a085018361400c565b91506040870151605f198086850301610120870152615f2a848361400c565b935060608901519150615f47838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f708282615d6b565b9150508281036020840152615f858186615e1f565b90508281036040840152615b9c8185615e6c56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.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 1a0db0f483a..59227bfa8cd 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 @@ -16,7 +16,7 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin c3cac2010c2815b484055bf981363a2bd04e7fbe7bb502dc8fd29a16165d221c multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin a523e11ea4c069d7d61b309c156951cc6834aff0f352bd1ac37c3a838ff2588f nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin e6008490d916826cefd1903612db39621d51617300fc9bb42b68c6c117958198 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 8e6c048d3a7799f4149bd7e470064be375a35538404b30ade4798ac27f8dbf7e +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 9d2c4805664a5609d781505aa1f6d365ec7c483be601c6191e0056d88ddb348b onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 2bf74188a997218502031f177cb2df505b272d66b25fd341a741289e77380c59 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 24b4415a883a470d65c484be0fa20714a46b1c9262db205f1c958017820307b2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 0fc277a0b512db4e20b5a32a775b94ed2c0d342d8237511de78c94f7dacad428 From a494da6b51d87b481a7180c5f5f14d6eee01b207 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 19 Dec 2024 12:32:13 -0500 Subject: [PATCH 13/15] Optimize library with better boolean logic. --- contracts/gas-snapshots/ccip.gas-snapshot | 102 +++++++++--------- .../ccip/libraries/ERC165CheckerReverting.sol | 35 +++--- ...Reverting.supportsInterfaceReverting.t.sol | 8 +- 3 files changed, 68 insertions(+), 77 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 7e2085f4da2..aa3d5ca5284 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -28,8 +28,8 @@ CCIPHome_setCandidate:test_setCandidate() (gas: 1365438) CCIPHome_supportsInterface:test_supportsInterface() (gas: 9885) DefensiveExampleTest:test_HappyPath() (gas: 200521) DefensiveExampleTest:test_Recovery() (gas: 425013) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1488604) -ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10485) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1488253) +ERC165CheckerReverting_supportsInterfaceReverting:test__supportsInterfaceReverting() (gas: 10445) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96980) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17479) @@ -196,11 +196,11 @@ NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123593) NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed() (gas: 45963) NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66943) NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12191) -NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 178809) -NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 145964) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182284) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 244860) -NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213660) +NonceManager_getInboundNonce:test_getInboundNonce_NoPrevOffRampForChain() (gas: 178770) +NonceManager_getInboundNonce:test_getInboundNonce_Upgraded() (gas: 145925) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceNewSenderStartsAtZero() (gas: 182245) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedNonceStartsAtV1Nonce() (gas: 244782) +NonceManager_getInboundNonce:test_getInboundNonce_UpgradedOffRampNonceSkipsIfMsgInFlight() (gas: 213621) NonceManager_getInboundNonce:test_getInboundNonce_UpgradedSenderNoncesReadsPreviousRamp() (gas: 60520) NonceManager_getIncrementedOutboundNonce:test_getIncrementedOutboundNonce() (gas: 37979) NonceManager_getIncrementedOutboundNonce:test_incrementInboundNonce() (gas: 38756) @@ -216,12 +216,12 @@ OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates() (gas: 16720) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain() (gas: 181035) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp() (gas: 168558) OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed() (gas: 284716) -OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 325290) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 170469) -OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 268589) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 161486) -OffRamp_batchExecute:test_SingleReport() (gas: 149417) -OffRamp_batchExecute:test_Unhealthy() (gas: 532472) +OffRamp_batchExecute:test_MultipleReportsDifferentChains() (gas: 325173) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain() (gas: 170430) +OffRamp_batchExecute:test_MultipleReportsSameChain() (gas: 268472) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate() (gas: 161447) +OffRamp_batchExecute:test_SingleReport() (gas: 149378) +OffRamp_batchExecute:test_Unhealthy() (gas: 532238) OffRamp_commit:test_OnlyGasPriceUpdates() (gas: 112719) OffRamp_commit:test_OnlyTokenPriceUpdates() (gas: 112673) OffRamp_commit:test_PriceSequenceNumberCleared() (gas: 354787) @@ -230,51 +230,51 @@ OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 140878) OffRamp_commit:test_RootWithRMNDisabled() (gas: 153674) OffRamp_commit:test_StaleReportWithRoot() (gas: 231732) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot() (gas: 206199) -OffRamp_constructor:test_Constructor() (gas: 6214884) -OffRamp_execute:test_LargeBatch() (gas: 3356668) -OffRamp_execute:test_MultipleReports() (gas: 290810) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 364216) -OffRamp_execute:test_SingleReport() (gas: 168660) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51668) +OffRamp_constructor:test_Constructor() (gas: 6211675) +OffRamp_execute:test_LargeBatch() (gas: 3355498) +OffRamp_execute:test_MultipleReports() (gas: 290693) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures() (gas: 364177) +OffRamp_execute:test_SingleReport() (gas: 168621) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 51629) OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20508) -OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230500) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87507) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 260081) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 454936) -OffRamp_executeSingleReport:test_ReceiverError() (gas: 180740) -OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 204974) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241285) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 184983) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 243852) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134510) +OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 230422) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 87468) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 259964) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 454780) +OffRamp_executeSingleReport:test_ReceiverError() (gas: 180701) +OffRamp_executeSingleReport:test_SingleMessageNoTokens() (gas: 204896) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain() (gas: 241207) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered() (gas: 184905) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver() (gas: 243806) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 134471) OffRamp_executeSingleReport:test_SkippedIncorrectNonce() (gas: 58298) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 392022) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 561726) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 510090) -OffRamp_executeSingleReport:test_Unhealthy() (gas: 528255) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439300) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 157898) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128289) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes() (gas: 391905) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE() (gas: 561492) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 509856) +OffRamp_executeSingleReport:test_Unhealthy() (gas: 528021) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain() (gas: 439066) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage() (gas: 157859) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered() (gas: 128250) OffRamp_getExecutionState:test_FillExecutionState() (gas: 3905742) OffRamp_getExecutionState:test_GetDifferentChainExecutionState() (gas: 121049) OffRamp_getExecutionState:test_GetExecutionState() (gas: 89738) -OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212136) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165627) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 475645) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2214967) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 212686) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 730621) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 336254) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94672) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161242) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 163112) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174351) +OffRamp_manuallyExecute:test_manuallyExecute() (gas: 212058) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched() (gas: 165588) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit() (gas: 475567) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails() (gas: 2214889) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride() (gas: 212608) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride() (gas: 730231) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages() (gas: 336098) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken() (gas: 94633) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 161164) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 163034) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 174273) OffRamp_setDynamicConfig:test_SetDynamicConfig() (gas: 25397) OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor() (gas: 47448) -OffRamp_trialExecute:test_trialExecute() (gas: 263717) -OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120730) -OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132040) -OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 281358) +OffRamp_trialExecute:test_trialExecute() (gas: 263600) +OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 120691) +OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 132001) +OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 281241) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy() (gas: 244196) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates() (gas: 325984) OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227) diff --git a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol index 1ff6f08c772..8844882f53a 100644 --- a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol +++ b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol @@ -6,9 +6,9 @@ import {IERC165} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/utils /// @notice Library used to query support of an interface declared via {IERC165}. /// @dev These functions return the actual result of the query: they do not `revert` if an interface is not supported. library ERC165CheckerReverting { - error InsufficientGasForStaticcall(); + error InsufficientGasForStaticCall(); - // As per the EIP-165 spec, no interface should ever match 0xffffffff + // As per the EIP-165 spec, no interface should ever match 0xffffffff. bytes4 private constant INTERFACE_ID_INVALID = 0xffffffff; /// @dev 30k gas is required to make the staticcall. Under the 63/64 rule this means that 30,477 gas must be available @@ -17,26 +17,17 @@ library ERC165CheckerReverting { /// 30,000 = ((30,477 * 63) / 64) uint256 private constant MINIMUM_GAS_REQUIREMENT = 31_000; - /// @notice Returns true if `account` supports the {IERC165} interface. - /// @dev Any contract that implements ERC165 must explicitly indicate support of InterfaceId_ERC165 and explicitly - /// indicate non-support of InterfaceId_Invalid as per the standard. - /// @param account the address to be queried for support for ERC165 - /// @return true if the contract at account indicates support for ERC165, false otherwise - function _supportsERC165Reverting( - address account - ) internal view returns (bool) { - return _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId) - && !_supportsERC165InterfaceUncheckedReverting(account, INTERFACE_ID_INVALID); - } - - /// @notice Returns true if `account` supports a defined interface - /// @dev The function must support both the interfaceId and interfaces specified by ERC165 generally as per the standard - /// @param account the contract to be queried for support - /// @param interfaceId the interface being checked for support + /// @notice Returns true if `account` supports a defined interface. + /// @dev The function must support both the interfaceId and interfaces specified by ERC165 generally as per the standard. + /// @param account the contract to be queried for support. + /// @param interfaceId the interface being checked for support. /// @return true if the contract at account indicates support of the interface with, false otherwise. function _supportsInterfaceReverting(address account, bytes4 interfaceId) internal view returns (bool) { - // query support of both ERC165 as per the spec and support of _interfaceId - return _supportsERC165Reverting(account) && _supportsERC165InterfaceUncheckedReverting(account, interfaceId); + // As a gas optimization, short circuit return false if interfaceId is not supported, as it is most likely interfaceId + // to be unsupported by the target. + return _supportsERC165InterfaceUncheckedReverting(account, interfaceId) + && !_supportsERC165InterfaceUncheckedReverting(account, INTERFACE_ID_INVALID) + && _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId); } /// @notice Query if a contract implements an interface, does not check ERC165 support @@ -45,7 +36,7 @@ library ERC165CheckerReverting { /// @return true if the contract at account indicates support of the interface with /// identifier interfaceId, false otherwise /// @dev Assumes that account contains a contract that supports ERC165, otherwise - /// the behavior of this method is undefined. This precondition can be checked + /// the behavior of this method is undefined. This precondition can be checked. /// @dev Function will only revert if the minimum gas requirement is not met before the staticcall is performed. function _supportsERC165InterfaceUncheckedReverting(address account, bytes4 interfaceId) internal view returns (bool) { bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); @@ -54,7 +45,7 @@ library ERC165CheckerReverting { uint256 returnSize; uint256 returnValue; - bytes4 notEnoughGasSelector = InsufficientGasForStaticcall.selector; + bytes4 notEnoughGasSelector = InsufficientGasForStaticCall.selector; assembly { // The EVM does not return a specific error code if a revert is due to OOG. This check ensures that diff --git a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol index d8fa3bd14c8..89e61ba2063 100644 --- a/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol +++ b/contracts/src/v0.8/ccip/test/libraries/ERC165CheckerReverting.supportsInterfaceReverting.t.sol @@ -15,7 +15,7 @@ contract ERC165CheckerReverting_supportsInterfaceReverting is Test { bytes4 internal constant EXAMPLE_INTERFACE_ID = 0xdeadbeef; - error InsufficientGasForStaticcall(); + error InsufficientGasForStaticCall(); constructor() { s_receiver = address(new MaybeRevertMessageReceiver(false)); @@ -28,13 +28,13 @@ contract ERC165CheckerReverting_supportsInterfaceReverting is Test { // Reverts function test__supportsInterfaceReverting_RevertWhen_NotEnoughGasForSupportsInterface() public { - vm.expectRevert(InsufficientGasForStaticcall.selector); + vm.expectRevert(InsufficientGasForStaticCall.selector); // Library calls cannot be called with gas limit overrides, so a public function must be exposed // instead which can proxy the call to the library. - // The gas limit was chosen so that after overhead, <30k would remain to trigger the error. - this.invokeERC165Checker{gas: 35_000}(); + // The gas limit was chosen so that after overhead, <31k would remain to trigger the error. + this.invokeERC165Checker{gas: 33_000}(); } // Meant to test the call with a manual gas limit override From d9104f00ad6b45a6c824e39a4c9e2157ce5784b0 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 19 Dec 2024 12:37:25 -0500 Subject: [PATCH 14/15] formatting --- contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol index 8844882f53a..574b6d1501a 100644 --- a/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol +++ b/contracts/src/v0.8/ccip/libraries/ERC165CheckerReverting.sol @@ -26,8 +26,8 @@ library ERC165CheckerReverting { // As a gas optimization, short circuit return false if interfaceId is not supported, as it is most likely interfaceId // to be unsupported by the target. return _supportsERC165InterfaceUncheckedReverting(account, interfaceId) - && !_supportsERC165InterfaceUncheckedReverting(account, INTERFACE_ID_INVALID) - && _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId); + && !_supportsERC165InterfaceUncheckedReverting(account, INTERFACE_ID_INVALID) + && _supportsERC165InterfaceUncheckedReverting(account, type(IERC165).interfaceId); } /// @notice Query if a contract implements an interface, does not check ERC165 support From 435d9558c7b7bde103d0bad536f3a340cc090c42 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:44:45 +0000 Subject: [PATCH 15/15] Update gethwrappers --- core/gethwrappers/ccip/generated/offramp/offramp.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 6492fe747f9..f27b6f924b3 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -157,7 +157,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"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\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"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\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"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\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"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\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"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\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"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\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"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\":\"structOffRamp.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\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.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\":\"structOffRamp.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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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[2]\",\"name\":\"reportContext\",\"type\":\"bytes32[2]\"},{\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"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\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"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.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.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: "0x6101406040523480156200001257600080fd5b5060405162006d2138038062006d21833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615fa662000d7b600039600081816101b001528181610ce801528181612ed101526138260152600081816102380152612aa10152600081816102090152612d490152600081816101da01528181610fcc0152818161117c01526124a10152600081816101810152818161264c015261270301526000818161195b015261198e0152615fa66000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613eca565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd9190614038565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614092565b61035361034e366004614133565b6107c6565b6040516102bd9190614190565b61014461036e3660046146f9565b61081b565b610144610381366004614988565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a1c565b610e0d565b61014461012c366004614a81565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614acc565b610e1e565b6040516102bd9190614b2c565b6104dd6104b5366004614ba1565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c1d565b610f7c565b61051161050c366004614ccf565b61147f565b6040516102bd9190614cea565b61014461052c366004614cfd565b61158b565b61014461053f366004614d1a565b61159c565b610144610552366004614dd5565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613cea565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613cea565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f12565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f12565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f28565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f28565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f12565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f78565b60026107e1608085614fa1565b6001600160401b03166107f49190614fc7565b6107fe8585611913565b901c16600381111561081257610812614166565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f12565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f12565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f12565b60200260200101516000015190506000856020015183815181106108fd576108fd614f12565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f12565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f12565b60200260200101516020015182815181106109f6576109f6614f12565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f12565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb90859060040161508b565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d9190614038565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f0000000000000000000000000000000000000000000000000000000000000000929160040161509e565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150da565b509150915081610d7d57806040516302a35ba360e21b815260040161094d9190614038565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c50565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a87890189615387565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e9261100392309291906004016155af565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156c2565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f12565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156d5565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d55565b90508060010160405161122e91906156f2565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157e5565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c90600161580a565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615831565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611da1915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f28565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f28565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b6105688161209a565b6115dc6115ab82840184615856565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611da1565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f12565b6020026020010151612113565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f12565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f28565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156f2565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158da565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b03851661243d565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e69190615999565b60405180910390a250505050806001019050611677565b6000610815825490565b60006108128383612449565b6001600160401b0382166000908152600960205260408120816119376080856159e7565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f12565b602002602001015184611a7557858381518110611a6857611a68614f12565b6020026020010151612473565b83612473565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613cea565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f12565b9050602002016020810190611b209190615a0d565b63ffffffff1615611b8357848482818110611b3d57611b3d614f12565b9050602002016020810190611b529190615a0d565b8b8281518110611b6457611b64614f12565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f12565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f12565b9050602002810190611bc79190615a28565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0e92505050565b838281518110611c1357611c13614f12565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c3f8361300e565b801561081257506108128383613041565b80516001600160a01b0316611c78576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e00876084615a6e565b9050826060015115611e48578451611e19906020614fc7565b8651611e26906020614fc7565b611e319060a0615a6e565b611e3b9190615a6e565b611e459082615a6e565b90505b368114611e7157604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ea05781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ea8611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ef657611ef6614166565b6002811115611f0757611f07614166565b9052509050600281602001516002811115611f2457611f24614166565b148015611f785750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f6057611f60614f12565b6000918252602090912001546001600160a01b031633145b611f9557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612045576020820151611fb0906001615a81565b60ff16855114611fd3576040516371253a2560e01b815260040160405180910390fd5b8351855114611ff55760405163a75d88af60e01b815260040160405180910390fd5b60008787604051612007929190615a9a565b60405190819003812061201e918b90602001615aaa565b6040516020818303038152906040528051906020012090506120438a828888886130e6565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120c357604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361213e576000604051631b3fab5160e11b815260040161094d9190615abe565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361218f576060840151600182018054911515620100000262ff0000199092169190911790556121cb565b6060840151600182015460ff62010000909104161515901515146121cb576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a0840151805161010010156121f7576001604051631b3fab5160e11b815260040161094d9190615abe565b805160000361221c576005604051631b3fab5160e11b815260040161094d9190615abe565b612282848460030180548060200260200160405190810160405280929190818152602001828054801561227857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225a575b5050505050613299565b8460600151156123b2576122f08484600201805480602002602001604051908101604052809291908181526020018280548015612278576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225a575050505050613299565b60808501518051610100101561231c576002604051631b3fab5160e11b815260040161094d9190615abe565b604086015161232c906003615ad8565b60ff16815111612352576003604051631b3fab5160e11b815260040161094d9190615abe565b815181511015612378576001604051631b3fab5160e11b815260040161094d9190615abe565b805160018401805461ff00191661010060ff8416021790556123a39060028601906020840190613c70565b506123b085826001613302565b505b6123be84826002613302565b80516123d39060038501906020840190613c70565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242c9389939260028a01929190615af4565b60405180910390a1610d838461345d565b600061081283836134e0565b600082600001828154811061246057612460614f12565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906156d5565b1561258557801561254357604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125bb57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b84604001515181146125e0576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156125fa576125fa613cea565b604051908082528060200260200182016040528015612623578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061267488611d55565b60010160405161268491906156f2565b6040519081900381206126bc949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156127f2576000886020015182815181106126f7576126f7614f12565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461276e5780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127c257805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127cc818461352f565b8483815181106127de576127de614f12565b6020908102919091010152506001016126d7565b5050600061280a858389606001518a60800151613637565b90508060000361283857604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d045760005a905060008960200151838151811061286057612860614f12565b60200260200101519050600061287e898360000151606001516107c6565b9050600081600381111561289457612894614166565b14806128b1575060038160038111156128af576128af614166565b145b61290757815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612cfc565b606088156129e6578a858151811061292157612921614f12565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff1661294f8842614f78565b119050808061296f5750600383600381111561296d5761296d614166565b145b612997576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129a9576129a9614f12565b6020026020010151600001516000146129e0578b86815181106129ce576129ce614f12565b60209081029190910101515160808501525b50612a52565b60008260038111156129fa576129fa614166565b14612a5257825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612cfc565b8251608001516001600160401b031615612b28576000826003811115612a7a57612a7a614166565b03612b285782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ad8928f929190600401615ba6565b6020604051808303816000875af1158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1b91906156d5565b612b285750505050612cfc565b60008c604001518681518110612b4057612b40614f12565b6020026020010151905080518460a001515114612b8a57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612b9e8b8560000151606001516001613674565b600080612bac868486613719565b91509150612bc38d87600001516060015184613674565b8b15612c1a576003826003811115612bdd57612bdd614166565b03612c1a576000856003811115612bf657612bf6614166565b14612c1a57855151604051632b11b8d960e01b815261094d91908390600401615bd2565b6002826003811115612c2e57612c2e614166565b14612c6f576003826003811115612c4757612c47614166565b14612c6f578551606001516040516349362d1f60e11b815261094d918f918590600401615beb565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cc757612cc7614f12565b602002602001015186865a612cdc908f614f78565b604051612cec9493929190615c10565b60405180910390a4505050505050505b60010161283b565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190615c47565b90506001600160a01b0381161580612de55750612de36001600160a01b03821663aff2afbf60e01b611c34565b155b15612e0e5760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e2688858c6040015163ffffffff166137cd565b915091506000806000612ef76040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ea39190615c64565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138d0565b92509250925082612f1f578582604051634ff17cad60e11b815260040161094d929190615d30565b8151602014612f4e578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f649190615d52565b9050866001600160a01b03168c6001600160a01b031614612fe0576000612f958d8a612f90868a614f78565b6137cd565b50905086811080612faf575081612fac8883614f78565b14155b15612fde5760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613021826301ffc9a760e01b613041565b8015610815575061303a826001600160e01b0319613041565b1592915050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b179052600090818080635c791e1560e11b6179185a10156130a7578060005260046000fd5b602060008651602088018b617530fa93503d925060005191508380156130ce575060208310155b80156130da5750600082115b98975050505050505050565b8251600090815b81811015612d0457600060018886846020811061310c5761310c614f12565b61311991901a601b615a81565b89858151811061312b5761312b614f12565b602002602001015189868151811061314557613145614f12565b602002602001015160405160008152602001604052604051613183949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131a5573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561320657613206614166565b600281111561321757613217614166565b905250905060018160200151600281111561323457613234614166565b1461325257604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561327c57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130ed565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132ce576132ce614f12565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161329c565b60005b82518110156115ff57600083828151811061332257613322614f12565b602002602001015190506000600281111561333f5761333f614166565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561337e5761337e614166565b1461339f576004604051631b3fab5160e11b815260040161094d9190615abe565b6001600160a01b0381166133c65760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133ec576133ec614166565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344957613449614166565b021790555090505050806001019050613305565b60ff818116600081815260026020526040902060010154620100009004909116906134b557806134a0576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561359395919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135d69190615e0c565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136458585856139aa565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613683608085614fa1565b6001600160401b03166136969190614fc7565b905060006136a48585611913565b9050816136b360016004614f78565b901b1916818360038111156136ca576136ca614166565b6001600160401b03871660009081526009602052604081209190921b929092179182916136f86080886159e7565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374690889088908890600401615ea3565b600060405180830381600087803b15801561376057600080fd5b505af1925050508015613771575060015b6137b0573d80801561379f576040519150601f19603f3d011682016040523d82523d6000602084013e6137a4565b606091505b506003925090506137c5565b50506040805160208101909152600081526002905b935093915050565b600080600080600061384c886040516024016137f891906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138d0565b92509250925082613874578682604051634ff17cad60e11b815260040161094d929190615d30565b60208251146138a3578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138b79190615d52565b6138c18288614f78565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138f2576138f2613cea565b6040519080825280601f01601f19166020018201604052801561391c576020820181803683370190505b509150863b6139365763030ed58f60e21b60005260046000fd5b5a8581101561395057632be8ca8b60e21b60005260046000fd5b8590036040810481038710613970576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139935750835b808352806000602085013e50955095509592505050565b82518251600091908183036139d257604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139e657506101018111155b613a03576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a2d576040516309bde33960e01b815260040160405180910390fd5b80600003613a5a5786600081518110613a4857613a48614f12565b60200260200101519350505050613c28565b6000816001600160401b03811115613a7457613a74613cea565b604051908082528060200260200182016040528015613a9d578160200160208202803683370190505b50905060008080805b85811015613bc75760006001821b8b811603613b015788851015613aea578c5160018601958e918110613adb57613adb614f12565b60200260200101519050613b23565b8551600185019487918110613adb57613adb614f12565b8b5160018401938d918110613b1857613b18614f12565b602002602001015190505b600089861015613b53578d5160018701968f918110613b4457613b44614f12565b60200260200101519050613b75565b8651600186019588918110613b6a57613b6a614f12565b602002602001015190505b82851115613b96576040516309bde33960e01b815260040160405180910390fd5b613ba08282613c2f565b878481518110613bb257613bb2614f12565b60209081029190910101525050600101613aa6565b506001850382148015613bd957508683145b8015613be457508581145b613c01576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c1657613c16614f12565b60200260200101519750505050505050505b9392505050565b6000818310613c4757613c428284613c4d565b610812565b61081283835b604080516001602082015290810183905260608101829052600090608001613619565b828054828255906000526020600020908101928215613cc5579160200282015b82811115613cc557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c90565b50613cd1929150613cd5565b5090565b5b80821115613cd15760008155600101613cd6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d2257613d22613cea565b60405290565b60405160a081016001600160401b0381118282101715613d2257613d22613cea565b60405160c081016001600160401b0381118282101715613d2257613d22613cea565b604080519081016001600160401b0381118282101715613d2257613d22613cea565b604051606081016001600160401b0381118282101715613d2257613d22613cea565b604051601f8201601f191681016001600160401b0381118282101715613dd857613dd8613cea565b604052919050565b60006001600160401b03821115613df957613df9613cea565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e2f57600080fd5b919050565b801515811461056857600080fd5b8035613e2f81613e34565b60006001600160401b03821115613e6657613e66613cea565b50601f01601f191660200190565b600082601f830112613e8557600080fd5b8135613e98613e9382613e4d565b613db0565b818152846020838601011115613ead57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613edd57600080fd5b82356001600160401b0380821115613ef457600080fd5b818501915085601f830112613f0857600080fd5b8135613f16613e9382613de0565b81815260059190911b83018401908481019088831115613f3557600080fd5b8585015b83811015613fdb57803585811115613f515760008081fd5b86016080818c03601f1901811315613f695760008081fd5b613f71613d00565b89830135613f7e81613e03565b81526040613f8d848201613e18565b8b830152606080850135613fa081613e34565b83830152928401359289841115613fb957600091508182fd5b613fc78f8d86880101613e74565b908301525085525050918601918601613f39565b5098975050505050505050565b60005b83811015614003578181015183820152602001613feb565b50506000910152565b60008151808452614024816020860160208601613fe8565b601f01601f19169290920160200192915050565b602081526000610812602083018461400c565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261366c608085018261400c565b604080825283519082018190526000906020906060840190828701845b828110156140d45781516001600160401b0316845292840192908401906001016140af565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561412457601f1986840301855261411283835161404b565b948701949250908601906001016140f6565b50909998505050505050505050565b6000806040838503121561414657600080fd5b61414f83613e18565b915061415d60208401613e18565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061418c5761418c614166565b9052565b60208101610815828461417c565b600060a082840312156141b057600080fd5b6141b8613d28565b9050813581526141ca60208301613e18565b60208201526141db60408301613e18565b60408201526141ec60608301613e18565b60608201526141fd60808301613e18565b608082015292915050565b8035613e2f81613e03565b803563ffffffff81168114613e2f57600080fd5b600082601f83011261423857600080fd5b81356020614248613e9383613de0565b82815260059290921b8401810191818101908684111561426757600080fd5b8286015b848110156143375780356001600160401b038082111561428b5760008081fd5b9088019060a0828b03601f19018113156142a55760008081fd5b6142ad613d28565b87840135838111156142bf5760008081fd5b6142cd8d8a83880101613e74565b8252506040808501356142df81613e03565b828a015260606142f0868201614213565b8284015260809150818601358581111561430a5760008081fd5b6143188f8c838a0101613e74565b918401919091525091909301359083015250835291830191830161426b565b509695505050505050565b6000610140828403121561435557600080fd5b61435d613d4a565b9050614369838361419e565b815260a08201356001600160401b038082111561438557600080fd5b61439185838601613e74565b602084015260c08401359150808211156143aa57600080fd5b6143b685838601613e74565b60408401526143c760e08501614208565b606084015261010084013560808401526101208401359150808211156143ec57600080fd5b506143f984828501614227565b60a08301525092915050565b600082601f83011261441657600080fd5b81356020614426613e9383613de0565b82815260059290921b8401810191818101908684111561444557600080fd5b8286015b848110156143375780356001600160401b038111156144685760008081fd5b6144768986838b0101614342565b845250918301918301614449565b600082601f83011261449557600080fd5b813560206144a5613e9383613de0565b82815260059290921b840181019181810190868411156144c457600080fd5b8286015b848110156143375780356001600160401b03808211156144e757600080fd5b818901915089603f8301126144fb57600080fd5b8582013561450b613e9382613de0565b81815260059190911b830160400190878101908c83111561452b57600080fd5b604085015b838110156145645780358581111561454757600080fd5b6145568f6040838a0101613e74565b845250918901918901614530565b508752505050928401925083016144c8565b600082601f83011261458757600080fd5b81356020614597613e9383613de0565b8083825260208201915060208460051b8701019350868411156145b957600080fd5b602086015b8481101561433757803583529183019183016145be565b600082601f8301126145e657600080fd5b813560206145f6613e9383613de0565b82815260059290921b8401810191818101908684111561461557600080fd5b8286015b848110156143375780356001600160401b03808211156146395760008081fd5b9088019060a0828b03601f19018113156146535760008081fd5b61465b613d28565b614666888501613e18565b81526040808501358481111561467c5760008081fd5b61468a8e8b83890101614405565b8a84015250606080860135858111156146a35760008081fd5b6146b18f8c838a0101614484565b83850152506080915081860135858111156146cc5760008081fd5b6146da8f8c838a0101614576565b9184019190915250919093013590830152508352918301918301614619565b6000806040838503121561470c57600080fd5b6001600160401b038335111561472157600080fd5b61472e84843585016145d5565b91506001600160401b036020840135111561474857600080fd5b6020830135830184601f82011261475e57600080fd5b61476b613e938235613de0565b81358082526020808301929160051b84010187101561478957600080fd5b602083015b6020843560051b85010181101561492f576001600160401b03813511156147b457600080fd5b87603f8235860101126147c657600080fd5b6147d9613e936020833587010135613de0565b81358501602081810135808452908301929160059190911b016040018a101561480157600080fd5b604083358701015b83358701602081013560051b0160400181101561491f576001600160401b038135111561483557600080fd5b833587018135016040818d03603f1901121561485057600080fd5b614858613d6c565b604082013581526001600160401b036060830135111561487757600080fd5b8c605f60608401358401011261488c57600080fd5b60406060830135830101356148a3613e9382613de0565b808282526020820191508f60608460051b60608801358801010111156148c857600080fd5b6060808601358601015b60608460051b6060880135880101018110156148ff576148f181614213565b8352602092830192016148d2565b508060208501525050508085525050602083019250602081019050614809565b508452506020928301920161478e565b508093505050509250929050565b60008083601f84011261494f57600080fd5b5081356001600160401b0381111561496657600080fd5b6020830191508360208260051b850101111561498157600080fd5b9250929050565b6000806000806000606086880312156149a057600080fd5b85356001600160401b03808211156149b757600080fd5b6149c389838a01614342565b965060208801359150808211156149d957600080fd5b6149e589838a0161493d565b909650945060408801359150808211156149fe57600080fd5b50614a0b8882890161493d565b969995985093965092949392505050565b600060808284031215614a2e57600080fd5b614a36613d00565b8235614a4181613e03565b8152614a4f60208401614213565b60208201526040830135614a6281613e34565b60408201526060830135614a7581613e03565b60608201529392505050565b600060208284031215614a9357600080fd5b81356001600160401b03811115614aa957600080fd5b820160a08185031215613c2857600080fd5b803560ff81168114613e2f57600080fd5b600060208284031215614ade57600080fd5b61081282614abb565b60008151808452602080850194506020840160005b83811015614b215781516001600160a01b031687529582019590820190600101614afc565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b7b60e0840182614ae7565b90506040840151601f198483030160c0850152614b988282614ae7565b95945050505050565b60008060408385031215614bb457600080fd5b614bbd83613e18565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bee57600080fd5b5081356001600160401b03811115614c0557600080fd5b60208301915083602082850101111561498157600080fd5b60008060008060008060008060c0898b031215614c3957600080fd5b614c438a8a614bcb565b975060408901356001600160401b0380821115614c5f57600080fd5b614c6b8c838d01614bdc565b909950975060608b0135915080821115614c8457600080fd5b614c908c838d0161493d565b909750955060808b0135915080821115614ca957600080fd5b50614cb68b828c0161493d565b999c989b50969995989497949560a00135949350505050565b600060208284031215614ce157600080fd5b61081282613e18565b602081526000610812602083018461404b565b600060208284031215614d0f57600080fd5b8135613c2881613e03565b600080600060608486031215614d2f57600080fd5b614d398585614bcb565b925060408401356001600160401b03811115614d5457600080fd5b614d6086828701614bdc565b9497909650939450505050565b600082601f830112614d7e57600080fd5b81356020614d8e613e9383613de0565b8083825260208201915060208460051b870101935086841115614db057600080fd5b602086015b84811015614337578035614dc881613e03565b8352918301918301614db5565b60006020808385031215614de857600080fd5b82356001600160401b0380821115614dff57600080fd5b818501915085601f830112614e1357600080fd5b8135614e21613e9382613de0565b81815260059190911b83018401908481019088831115614e4057600080fd5b8585015b83811015613fdb57803585811115614e5b57600080fd5b860160c0818c03601f19011215614e725760008081fd5b614e7a613d4a565b8882013581526040614e8d818401614abb565b8a8301526060614e9e818501614abb565b8284015260809150614eb1828501613e42565b9083015260a08381013589811115614ec95760008081fd5b614ed78f8d83880101614d6d565b838501525060c0840135915088821115614ef15760008081fd5b614eff8e8c84870101614d6d565b9083015250845250918601918601614e44565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f3c57607f821691505b602082108103614f5c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f62565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fbb57614fbb614f8b565b92169190910692915050565b808202811582820484141761081557610815614f62565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261501160a087018261400c565b90506060850151868203606088015261502a828261400c565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561507f57835180516001600160a01b031683528601518683015292850192600192909201919084019061504d565b50979650505050505050565b6020815260006108126020830184614fde565b6080815260006150b16080830187614fde565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150ef57600080fd5b83516150fa81613e34565b60208501519093506001600160401b0381111561511657600080fd5b8401601f8101861361512757600080fd5b8051615135613e9382613e4d565b81815287602083850101111561514a57600080fd5b61515b826020830160208601613fe8565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e2f57600080fd5b600082601f83011261519757600080fd5b813560206151a7613e9383613de0565b82815260069290921b840181019181810190868411156151c657600080fd5b8286015b8481101561433757604081890312156151e35760008081fd5b6151eb613d6c565b6151f482613e18565b815261520185830161516f565b818601528352918301916040016151ca565b600082601f83011261522457600080fd5b81356020615234613e9383613de0565b82815260059290921b8401810191818101908684111561525357600080fd5b8286015b848110156143375780356001600160401b03808211156152775760008081fd5b9088019060a0828b03601f19018113156152915760008081fd5b615299613d28565b6152a4888501613e18565b8152604080850135848111156152ba5760008081fd5b6152c88e8b83890101613e74565b8a84015250606093506152dc848601613e18565b9082015260806152ed858201613e18565b93820193909352920135908201528352918301918301615257565b600082601f83011261531957600080fd5b81356020615329613e9383613de0565b82815260069290921b8401810191818101908684111561534857600080fd5b8286015b8481101561433757604081890312156153655760008081fd5b61536d613d6c565b81358152848201358582015283529183019160400161534c565b6000602080838503121561539a57600080fd5b82356001600160401b03808211156153b157600080fd5b90840190606082870312156153c557600080fd5b6153cd613d8e565b8235828111156153dc57600080fd5b830160408189038113156153ef57600080fd5b6153f7613d6c565b82358581111561540657600080fd5b8301601f81018b1361541757600080fd5b8035615425613e9382613de0565b81815260069190911b8201890190898101908d83111561544457600080fd5b928a01925b828410156154945785848f0312156154615760008081fd5b615469613d6c565b843561547481613e03565b8152615481858d0161516f565b818d0152825292850192908a0190615449565b8452505050828701359150848211156154ac57600080fd5b6154b88a838501615186565b818801528352505082840135828111156154d157600080fd5b6154dd88828601615213565b858301525060408301359350818411156154f657600080fd5b61550287858501615308565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156155a257601f19868403018952815160a06001600160401b038083511686528683015182888801526155668388018261400c565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161552e565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155d26060840186615511565b83810360408581019190915285518083528387019284019060005b81811015614124578451805184528601518684015293850193918301916001016155ed565b805160408084528151848201819052600092602091908201906060870190855b8181101561566957835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615632565b50508583015187820388850152805180835290840192506000918401905b8083101561507f57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615687565b6020815260006108126020830184615612565b6000602082840312156156e757600080fd5b8151613c2881613e34565b600080835461570081614f28565b60018281168015615718576001811461572d5761575c565b60ff198416875282151583028701945061575c565b8760005260208060002060005b858110156157535781548a82015290840190820161573a565b50505082870194505b50929695505050505050565b6000815461577581614f28565b80855260206001838116801561579257600181146157ac576157da565b60ff1985168884015283151560051b8801830195506157da565b866000528260002060005b858110156157d25781548a82018601529083019084016157b7565b890184019650505b505050505092915050565b6040815260006157f8604083018561400c565b8281036020840152614b988185615768565b6001600160401b0381811683821601908082111561582a5761582a614f62565b5092915050565b6040815260006158446040830185615511565b8281036020840152614b988185615612565b60006020828403121561586857600080fd5b81356001600160401b0381111561587e57600080fd5b61366c848285016145d5565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158b35750805b601f850160051c820191505b818110156158d2578281556001016158bf565b505050505050565b81516001600160401b038111156158f3576158f3613cea565b615907816159018454614f28565b8461588a565b602080601f83116001811461593c57600084156159245750858301515b600019600386901b1c1916600185901b1785556158d2565b600085815260208120601f198616915b8281101561596b5788860151825594840194600190910190840161594c565b50858210156159895787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a0830160018501615768565b60006001600160401b0380841680615a0157615a01614f8b565b92169190910492915050565b600060208284031215615a1f57600080fd5b61081282614213565b6000808335601e19843603018112615a3f57600080fd5b8301803591506001600160401b03821115615a5957600080fd5b60200191503681900382131561498157600080fd5b8082018082111561081557610815614f62565b60ff818116838216019081111561081557610815614f62565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ad257615ad2614166565b91905290565b60ff818116838216029081169081811461582a5761582a614f62565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b4c5784546001600160a01b031683526001948501949284019201615b27565b50508481036060860152865180825290820192508187019060005b81811015615b8c5782516001600160a01b031685529383019391830191600101615b67565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b98606083018461400c565b82815260406020820152600061366c604083018461400c565b6001600160401b038481168252831660208201526060810161366c604083018461417c565b848152615c20602082018561417c565b608060408201526000615c36608083018561400c565b905082606083015295945050505050565b600060208284031215615c5957600080fd5b8151613c2881613e03565b6020815260008251610100806020850152615c8361012085018361400c565b91506020850151615c9f60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cd960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cf6848361400c565b935060c08701519150808685030160e0870152615d13848361400c565b935060e0870151915080868503018387015250615b9c838261400c565b6001600160a01b038316815260406020820152600061366c604083018461400c565b600060208284031215615d6457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b848110156155a257601f19868403018952815160a08151818652615dae8287018261400c565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615dea838261400c565b6080948501519790940196909652505098840198925090830190600101615d88565b6020815260006108126020830184615d6b565b60008282518085526020808601955060208260051b8401016020860160005b848110156155a257601f19868403018952615e5a83835161400c565b98840198925090830190600101615e3e565b60008151808452602080850194506020840160005b83811015614b2157815163ffffffff1687529582019590820190600101615e81565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f0b6101a085018361400c565b91506040870151605f198086850301610120870152615f2a848361400c565b935060608901519150615f47838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f708282615d6b565b9150508281036020840152615f858186615e1f565b90508281036040840152615b9c8185615e6c56fea164736f6c6343000818000a", + Bin: "0x6101406040523480156200001257600080fd5b5060405162006d1138038062006d11833981016040819052620000359162000936565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001dc565b50504660805260408301516001600160a01b03161580620000b6575060608301516001600160a01b0316155b80620000cd575060808301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a0908152604080860180516001600160a01b0390811660c05260608089018051831660e0526080808b0180518516610100526020808d01805161ffff9081166101205289518f51909c168c52905116908a0152945184169588019590955251821690860152905116908301527fb0fa1fb01508c5097c502ad056fd77018870c9be9a86d9e56b6b471862d7c5b7910160405180910390a1620001c88262000256565b620001d38162000344565b50505062000cde565b336001600160a01b038216036200020657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03166200027f576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005d957600082828151811062000368576200036862000a16565b60200260200101519050600081602001519050806001600160401b0316600003620003a65760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003cf576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003fd9062000a2c565b905060000362000460578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004d1565b8154600160a81b90046001600160401b0316600114801590620004a35750805160208201206040516200049890600185019062000a68565b604051809103902014155b15620004d157604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620005075750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000526576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000536828262000b3b565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200058560066001600160401b038516620005dd565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005c1919062000c07565b60405180910390a25050505080600101905062000347565b5050565b6000620005eb8383620005f4565b90505b92915050565b60008181526001830160205260408120546200063d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005ee565b506000620005ee565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000681576200068162000646565b60405290565b60405160a081016001600160401b038111828210171562000681576200068162000646565b604051601f8201601f191681016001600160401b0381118282101715620006d757620006d762000646565b604052919050565b80516001600160401b0381168114620006f757600080fd5b919050565b6001600160a01b03811681146200071257600080fd5b50565b80518015158114620006f757600080fd5b6000608082840312156200073957600080fd5b620007436200065c565b905081516200075281620006fc565b8152602082015163ffffffff811681146200076c57600080fd5b60208201526200077f6040830162000715565b604082015260608201516200079481620006fc565b606082015292915050565b6000601f83601f840112620007b357600080fd5b825160206001600160401b0380831115620007d257620007d262000646565b8260051b620007e3838201620006ac565b9384528681018301938381019089861115620007fe57600080fd5b84890192505b8583101562000929578251848111156200081e5760008081fd5b89016080601f19828d038101821315620008385760008081fd5b620008426200065c565b888401516200085181620006fc565b8152604062000862858201620006df565b8a83015260606200087581870162000715565b838301529385015193898511156200088d5760008081fd5b84860195508f603f870112620008a557600094508485fd5b8a860151945089851115620008be57620008be62000646565b620008cf8b858f88011601620006ac565b93508484528f82868801011115620008e75760008081fd5b60005b8581101562000907578681018301518582018d01528b01620008ea565b5060009484018b01949094525091820152835250918401919084019062000804565b9998505050505050505050565b60008060008385036101408112156200094e57600080fd5b60a08112156200095d57600080fd5b506200096862000687565b6200097385620006df565b8152602085015161ffff811681146200098b57600080fd5b60208201526040850151620009a081620006fc565b60408201526060850151620009b581620006fc565b60608201526080850151620009ca81620006fc565b60808201529250620009e08560a0860162000726565b6101208501519092506001600160401b03811115620009fe57600080fd5b62000a0c868287016200079f565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4157607f821691505b60208210810362000a6257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a788162000a2c565b6001828116801562000a93576001811462000aa95762000ada565b60ff198416875282151583028701945062000ada565b8760005260208060002060005b8581101562000ad15781548a82015290840190820162000ab6565b50505082870194505b50929695505050505050565b601f82111562000b36576000816000526020600020601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b5050505b505050565b81516001600160401b0381111562000b575762000b5762000646565b62000b6f8162000b68845462000a2c565b8462000ae6565b602080601f83116001811462000ba7576000841562000b8e5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd85788860151825594840194600190910190840162000bb7565b508582101562000bf75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c5c8162000a2c565b8060a089015260c0600183166000811462000c80576001811462000c9d5762000ccf565b60ff19841660c08b015260c083151560051b8b0101945062000ccf565b85600052602060002060005b8481101562000cc65781548c820185015290880190890162000ca9565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161012051615f9662000d7b600039600081816101b001528181610ce801528181612ef401526138160152600081816102380152612ac40152600081816102090152612d6c0152600081816101da01528181610fcc0152818161117c01526124c40152600081816101810152818161266f015261272601526000818161195b015261198e0152615f966000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637edf52f4116100ad578063de5e0b9a11610071578063de5e0b9a146104eb578063e9d68a8e146104fe578063f2fde38b1461051e578063f58e03fc14610531578063f716f99f1461054457600080fd5b80637edf52f41461044b57806385572ffb1461045e5780638da5cb5b1461046c578063c673e58414610487578063ccd37ba3146104a757600080fd5b80635e36480c116100f45780635e36480c146103405780635e7bb0081461036057806360987c20146103735780637437ff9f1461038657806379ba50971461044357600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a77146102c65780633f4b04aa1461030f5780635215505b1461032a575b600080fd5b61014461013f366004613eba565b610557565b005b6102686040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000061ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040805182516001600160401b0316815260208084015161ffff1690820152828201516001600160a01b03908116928201929092526060808401518316908201526080928301519091169181019190915260a0015b60405180910390f35b6103026040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102bd9190614028565b600b546040516001600160401b0390911681526020016102bd565b61033261056b565b6040516102bd929190614082565b61035361034e366004614123565b6107c6565b6040516102bd9190614180565b61014461036e3660046146e9565b61081b565b610144610381366004614978565b610aaf565b6103fc60408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b6040516102bd919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b610144610d8a565b610144610459366004614a0c565b610e0d565b61014461012c366004614a71565b6001546040516001600160a01b0390911681526020016102bd565b61049a610495366004614abc565b610e1e565b6040516102bd9190614b1c565b6104dd6104b5366004614b91565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102bd565b6101446104f9366004614c0d565b610f7c565b61051161050c366004614cbf565b61147f565b6040516102bd9190614cda565b61014461052c366004614ced565b61158b565b61014461053f366004614d0a565b61159c565b610144610552366004614dc5565b611605565b61055f611647565b61056881611674565b50565b606080600061057a60066118fd565b6001600160401b0381111561059157610591613cda565b6040519080825280602002602001820160405280156105e257816020015b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816105af5790505b50905060006105f160066118fd565b6001600160401b0381111561060857610608613cda565b604051908082528060200260200182016040528015610631578160200160208202803683370190505b50905060005b61064160066118fd565b8110156107bd57610653600682611907565b82828151811061066557610665614f02565b60200260200101906001600160401b031690816001600160401b0316815250506008600083838151811061069b5761069b614f02565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b9092049093169181019190915260018201805491929160608401919061071690614f18565b80601f016020809104026020016040519081016040528092919081815260200182805461074290614f18565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050815250508382815181106107aa576107aa614f02565b6020908102919091010152600101610637565b50939092509050565b60006107d460016004614f68565b60026107e1608085614f91565b6001600160401b03166107f49190614fb7565b6107fe8585611913565b901c16600381111561081257610812614156565b90505b92915050565b610823611958565b815181518114610846576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610a9f57600084828151811061086557610865614f02565b6020026020010151905060008160200151519050600085848151811061088d5761088d614f02565b60200260200101519050805182146108b8576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610a905760008282815181106108d7576108d7614f02565b60200260200101516000015190506000856020015183815181106108fd576108fd614f02565b6020026020010151905081600014610956578060800151821015610956578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064015b60405180910390fd5b83838151811061096857610968614f02565b602002602001015160200151518160a0015151146109b557805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b0316602482015260440161094d565b60005b8160a0015151811015610a825760008585815181106109d9576109d9614f02565b60200260200101516020015182815181106109f6576109f6614f02565b602002602001015163ffffffff16905080600014610a795760008360a001518381518110610a2657610a26614f02565b60200260200101516040015163ffffffff16905080821015610a77578351516040516348e617b360e01b8152600481019190915260248101849052604481018290526064810183905260840161094d565b505b506001016109b8565b5050508060010190506108bb565b50505050806001019050610849565b50610aaa83836119c0565b505050565b333014610acf576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281610b0c565b6040805180820190915260008082526020820152815260200190600190039081610ae55790505b5060a08701515190915015610b4257610b3f8660a001518760200151886060015189600001516020015189898989611a83565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015610c35576040516308d450a160e01b81526001600160a01b038216906308d450a190610bbb90859060040161507b565b600060405180830381600087803b158015610bd557600080fd5b505af1925050508015610be6575060015b610c35573d808015610c14576040519150601f19603f3d011682016040523d82523d6000602084013e610c19565b606091505b50806040516309c2532560e01b815260040161094d9190614028565b604088015151158015610c4a57506080880151155b80610c61575060608801516001600160a01b03163b155b80610c8857506060880151610c86906001600160a01b03166385572ffb60e01b611c34565b155b15610c9557505050610d83565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392610d119289927f0000000000000000000000000000000000000000000000000000000000000000929160040161508e565b6000604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5891908101906150ca565b509150915081610d7d57806040516302a35ba360e21b815260040161094d9190614028565b50505050505b5050505050565b6000546001600160a01b03163314610db55760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e15611647565b61056881611c73565b610e616040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610f0a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eec575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4e575b5050505050815250509050919050565b6000610f8a87890189615377565b6004805491925090600160c01b900460ff1661103457602082015151156110345760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e92611003923092919060040161559f565b60006040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050505b8151515115158061104a57508151602001515115155b1561111557600b5460208b0135906001600160401b03808316911610156110ed57600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f916110b6916004016156b2565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b50505050611113565b82602001515160000361111357604051632261116760e01b815260040160405180910390fd5b505b60005b8260200151518110156113cb5760008360200151828151811061113d5761113d614f02565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e791906156c5565b1561121057604051637edeb53960e11b81526001600160401b038216600482015260240161094d565b600061121b82611d78565b90508060010160405161122e91906156e2565b60405180910390208360200151805190602001201461126b5782602001518160010160405163b80d8fa960e01b815260040161094d9291906157d5565b60408301518154600160a81b90046001600160401b0390811691161415806112ac575082606001516001600160401b031683604001516001600160401b0316115b156112f157825160408085015160608601519151636af0786b60e11b81526001600160401b03938416600482015290831660248201529116604482015260640161094d565b6080830151806113145760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561136c5783516040516332cf0cbf60e01b81526001600160401b0390911660048201526024810182905260440161094d565b606084015161137c9060016157fa565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a602090815260408083209483529390529190912042905550600101611118565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e492611403929091615821565b60405180910390a1610d7d60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611dc4915050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161150b90614f18565b80601f016020809104026020016040519081016040528092919081815260200182805461153790614f18565b8015610f6c5780601f1061155957610100808354040283529160200191610f6c565b820191906000526020600020905b81548152906001019060200180831161156757505050919092525091949350505050565b611593611647565b610568816120bd565b6115dc6115ab82840184615846565b60408051600080825260208201909252906115d6565b60608152602001906001900390816115c15790505b506119c0565b6040805160008082526020820190925290506115ff600185858585866000611dc4565b50505050565b61160d611647565b60005b81518110156116435761163b82828151811061162e5761162e614f02565b6020026020010151612136565b600101611610565b5050565b6001546001600160a01b03163314611672576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b815181101561164357600082828151811061169457611694614f02565b60200260200101519050600081602001519050806001600160401b03166000036116d15760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116f9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461172590614f18565b905060000361178757815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117f0565b8154600160a81b90046001600160401b03166001148015906117c75750805160208201206040516117bc9060018501906156e2565b604051809103902014155b156117f057604051632105803760e11b81526001600160401b038416600482015260240161094d565b805115806118255750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611843576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185182826158ca565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118ac60066001600160401b038516612460565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118e69190615989565b60405180910390a250505050806001019050611677565b6000610815825490565b6000610812838361246c565b6001600160401b0382166000908152600960205260408120816119376080856159d7565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167257604051630f01ce8560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161094d565b81516000036119e25760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611a25565b6040805180820190915260008152606060208201528152602001906001900390816119fd5790505b50905060005b8451811015610d8357611a7b858281518110611a4957611a49614f02565b602002602001015184611a7557858381518110611a6857611a68614f02565b6020026020010151612496565b83612496565b600101611a2b565b606088516001600160401b03811115611a9e57611a9e613cda565b604051908082528060200260200182016040528015611ae357816020015b6040805180820190915260008082526020820152815260200190600190039081611abc5790505b509050811560005b8a51811015611c265781611b8357848482818110611b0b57611b0b614f02565b9050602002016020810190611b2091906159fd565b63ffffffff1615611b8357848482818110611b3d57611b3d614f02565b9050602002016020810190611b5291906159fd565b8b8281518110611b6457611b64614f02565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611c018b8281518110611b9857611b98614f02565b60200260200101518b8b8b8b8b87818110611bb557611bb5614f02565b9050602002810190611bc79190615a18565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d3192505050565b838281518110611c1357611c13614f02565b6020908102919091010152600101611aeb565b505098975050505050505050565b6000611c408383613031565b8015611c5b5750611c59836001600160e01b0319613031565b155b80156108125750610812836301ffc9a760e01b613031565b80516001600160a01b0316611c9b576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff166108155760405163ed053c5960e01b81526001600160401b038416600482015260240161094d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611e23876084615a5e565b9050826060015115611e6b578451611e3c906020614fb7565b8651611e49906020614fb7565b611e549060a0615a5e565b611e5e9190615a5e565b611e689082615a5e565b90505b368114611e9457604051638e1192e160e01b81526004810182905236602482015260440161094d565b5081518114611ec35781516040516324f7d61360e21b815260048101919091526024810182905260440161094d565b611ecb611958565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611f1957611f19614156565b6002811115611f2a57611f2a614156565b9052509050600281602001516002811115611f4757611f47614156565b148015611f9b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611f8357611f83614f02565b6000918252602090912001546001600160a01b031633145b611fb857604051631b41e11d60e31b815260040160405180910390fd5b50816060015115612068576020820151611fd3906001615a71565b60ff16855114611ff6576040516371253a2560e01b815260040160405180910390fd5b83518551146120185760405163a75d88af60e01b815260040160405180910390fd5b6000878760405161202a929190615a8a565b604051908190038120612041918b90602001615a9a565b6040516020818303038152906040528051906020012090506120668a828888886130d6565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b336001600160a01b038216036120e657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612161576000604051631b3fab5160e11b815260040161094d9190615aae565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121b2576060840151600182018054911515620100000262ff0000199092169190911790556121ee565b6060840151600182015460ff62010000909104161515901515146121ee576040516321fd80df60e21b815260ff8416600482015260240161094d565b60a08401518051610100101561221a576001604051631b3fab5160e11b815260040161094d9190615aae565b805160000361223f576005604051631b3fab5160e11b815260040161094d9190615aae565b6122a5848460030180548060200260200160405190810160405280929190818152602001828054801561229b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161227d575b5050505050613289565b8460600151156123d557612313848460020180548060200260200160405190810160405280929190818152602001828054801561229b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161227d575050505050613289565b60808501518051610100101561233f576002604051631b3fab5160e11b815260040161094d9190615aae565b604086015161234f906003615ac8565b60ff16815111612375576003604051631b3fab5160e11b815260040161094d9190615aae565b81518151101561239b576001604051631b3fab5160e11b815260040161094d9190615aae565b805160018401805461ff00191661010060ff8416021790556123c69060028601906020840190613c60565b506123d3858260016132f2565b505b6123e1848260026132f2565b80516123f69060038501906020840190613c60565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361244f9389939260028a01929190615ae4565b60405180910390a1610d838461344d565b600061081283836134d0565b600082600001828154811061248357612483614f02565b9060005260206000200154905092915050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253791906156c5565b156125a857801561256657604051637edeb53960e11b81526001600160401b038316600482015260240161094d565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036125de57845160405163676cf24b60e11b81526001600160401b03909116600482015260240161094d565b8460400151518114612603576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561261d5761261d613cda565b604051908082528060200260200182016040528015612646578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061269788611d78565b6001016040516126a791906156e2565b6040519081900381206126df949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156128155760008860200151828151811061271a5761271a614f02565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146127915780516040908101519051631c21951160e11b81526001600160401b03909116600482015260240161094d565b866001600160401b03168160000151602001516001600160401b0316146127e557805160200151604051636c95f1eb60e01b81526001600160401b03808a166004830152909116602482015260440161094d565b6127ef818461351f565b84838151811061280157612801614f02565b6020908102919091010152506001016126fa565b5050600061282d858389606001518a60800151613627565b90508060000361285b57604051633ee8bd3f60e11b81526001600160401b038616600482015260240161094d565b60005b83811015612d275760005a905060008960200151838151811061288357612883614f02565b6020026020010151905060006128a1898360000151606001516107c6565b905060008160038111156128b7576128b7614156565b14806128d4575060038160038111156128d2576128d2614156565b145b61292a57815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612d1f565b60608815612a09578a858151811061294457612944614f02565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff166129728842614f68565b11905080806129925750600383600381111561299057612990614156565b145b6129ba576040516354e7e43160e11b81526001600160401b038c16600482015260240161094d565b8b86815181106129cc576129cc614f02565b602002602001015160000151600014612a03578b86815181106129f1576129f1614f02565b60209081029190910101515160808501525b50612a75565b6000826003811115612a1d57612a1d614156565b14612a7557825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612d1f565b8251608001516001600160401b031615612b4b576000826003811115612a9d57612a9d614156565b03612b4b5782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612afb928f929190600401615b96565b6020604051808303816000875af1158015612b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3e91906156c5565b612b4b5750505050612d1f565b60008c604001518681518110612b6357612b63614f02565b6020026020010151905080518460a001515114612bad57835160600151604051631cfe6d8b60e01b81526001600160401b03808e166004830152909116602482015260440161094d565b612bc18b8560000151606001516001613664565b600080612bcf868486613709565b91509150612be68d87600001516060015184613664565b8b15612c3d576003826003811115612c0057612c00614156565b03612c3d576000856003811115612c1957612c19614156565b14612c3d57855151604051632b11b8d960e01b815261094d91908390600401615bc2565b6002826003811115612c5157612c51614156565b14612c92576003826003811115612c6a57612c6a614156565b14612c92578551606001516040516349362d1f60e11b815261094d918f918590600401615bdb565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612cea57612cea614f02565b602002602001015186865a612cff908f614f68565b604051612d0f9493929190615c00565b60405180910390a4505050505050505b60010161285e565b5050505050505050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd99190615c37565b90506001600160a01b0381161580612e085750612e066001600160a01b03821663aff2afbf60e01b611c34565b155b15612e315760405163ae9b4ce960e01b81526001600160a01b038216600482015260240161094d565b600080612e4988858c6040015163ffffffff166137bd565b915091506000806000612f1a6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b815250604051602401612ec69190615c54565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287867f000000000000000000000000000000000000000000000000000000000000000060846138c0565b92509250925082612f42578582604051634ff17cad60e11b815260040161094d929190615d20565b8151602014612f71578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b600082806020019051810190612f879190615d42565b9050866001600160a01b03168c6001600160a01b031614613003576000612fb88d8a612fb3868a614f68565b6137bd565b50905086811080612fd2575081612fcf8883614f68565b14155b156130015760405163a966e21f60e01b815260048101839052602481018890526044810182905260640161094d565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166301ffc9a760e01b17905260009081808063753fa58960e11b6179185a1015613097578060005260046000fd5b602060008651602088018b617530fa93503d925060005191508380156130be575060208310155b80156130ca5750600082115b98975050505050505050565b8251600090815b81811015612d275760006001888684602081106130fc576130fc614f02565b61310991901a601b615a71565b89858151811061311b5761311b614f02565b602002602001015189868151811061313557613135614f02565b602002602001015160405160008152602001604052604051613173949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015613195573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156131f6576131f6614156565b600281111561320757613207614156565b905250905060018160200151600281111561322457613224614156565b1461324257604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561326c57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506130dd565b60005b8151811015610aaa5760ff8316600090815260036020526040812083519091908490849081106132be576132be614f02565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161328c565b60005b82518110156115ff57600083828151811061331257613312614f02565b602002602001015190506000600281111561332f5761332f614156565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561336e5761336e614156565b1461338f576004604051631b3fab5160e11b815260040161094d9190615aae565b6001600160a01b0381166133b65760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133dc576133dc614156565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561343957613439614156565b0217905550905050508060010190506132f5565b60ff818116600081815260026020526040902060010154620100009004909116906134a55780613490576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611643578015611643576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461351757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610815565b506000610815565b81518051606080850151908301516080808701519401516040516000958695889561358395919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135c69190615dfc565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061363585858561399a565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b60006002613673608085614f91565b6001600160401b03166136869190614fb7565b905060006136948585611913565b9050816136a360016004614f68565b901b1916818360038111156136ba576136ba614156565b6001600160401b03871660009081526009602052604081209190921b929092179182916136e86080886159d7565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061373690889088908890600401615e93565b600060405180830381600087803b15801561375057600080fd5b505af1925050508015613761575060015b6137a0573d80801561378f576040519150601f19603f3d011682016040523d82523d6000602084013e613794565b606091505b506003925090506137b5565b50506040805160208101909152600081526002905b935093915050565b600080600080600061383c886040516024016137e891906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288887f000000000000000000000000000000000000000000000000000000000000000060846138c0565b92509250925082613864578682604051634ff17cad60e11b815260040161094d929190615d20565b6020825114613893578151604051631e3be00960e21b815260206004820152602481019190915260440161094d565b818060200190518101906138a79190615d42565b6138b18288614f68565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138e2576138e2613cda565b6040519080825280601f01601f19166020018201604052801561390c576020820181803683370190505b509150863b6139265763030ed58f60e21b60005260046000fd5b5a8581101561394057632be8ca8b60e21b60005260046000fd5b8590036040810481038710613960576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139835750835b808352806000602085013e50955095509592505050565b82518251600091908183036139c257604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139d657506101018111155b6139f3576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a1d576040516309bde33960e01b815260040160405180910390fd5b80600003613a4a5786600081518110613a3857613a38614f02565b60200260200101519350505050613c18565b6000816001600160401b03811115613a6457613a64613cda565b604051908082528060200260200182016040528015613a8d578160200160208202803683370190505b50905060008080805b85811015613bb75760006001821b8b811603613af15788851015613ada578c5160018601958e918110613acb57613acb614f02565b60200260200101519050613b13565b8551600185019487918110613acb57613acb614f02565b8b5160018401938d918110613b0857613b08614f02565b602002602001015190505b600089861015613b43578d5160018701968f918110613b3457613b34614f02565b60200260200101519050613b65565b8651600186019588918110613b5a57613b5a614f02565b602002602001015190505b82851115613b86576040516309bde33960e01b815260040160405180910390fd5b613b908282613c1f565b878481518110613ba257613ba2614f02565b60209081029190910101525050600101613a96565b506001850382148015613bc957508683145b8015613bd457508581145b613bf1576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c0657613c06614f02565b60200260200101519750505050505050505b9392505050565b6000818310613c3757613c328284613c3d565b610812565b61081283835b604080516001602082015290810183905260608101829052600090608001613609565b828054828255906000526020600020908101928215613cb5579160200282015b82811115613cb557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c80565b50613cc1929150613cc5565b5090565b5b80821115613cc15760008155600101613cc6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d1257613d12613cda565b60405290565b60405160a081016001600160401b0381118282101715613d1257613d12613cda565b60405160c081016001600160401b0381118282101715613d1257613d12613cda565b604080519081016001600160401b0381118282101715613d1257613d12613cda565b604051606081016001600160401b0381118282101715613d1257613d12613cda565b604051601f8201601f191681016001600160401b0381118282101715613dc857613dc8613cda565b604052919050565b60006001600160401b03821115613de957613de9613cda565b5060051b60200190565b6001600160a01b038116811461056857600080fd5b80356001600160401b0381168114613e1f57600080fd5b919050565b801515811461056857600080fd5b8035613e1f81613e24565b60006001600160401b03821115613e5657613e56613cda565b50601f01601f191660200190565b600082601f830112613e7557600080fd5b8135613e88613e8382613e3d565b613da0565b818152846020838601011115613e9d57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ecd57600080fd5b82356001600160401b0380821115613ee457600080fd5b818501915085601f830112613ef857600080fd5b8135613f06613e8382613dd0565b81815260059190911b83018401908481019088831115613f2557600080fd5b8585015b83811015613fcb57803585811115613f415760008081fd5b86016080818c03601f1901811315613f595760008081fd5b613f61613cf0565b89830135613f6e81613df3565b81526040613f7d848201613e08565b8b830152606080850135613f9081613e24565b83830152928401359289841115613fa957600091508182fd5b613fb78f8d86880101613e64565b908301525085525050918601918601613f29565b5098975050505050505050565b60005b83811015613ff3578181015183820152602001613fdb565b50506000910152565b60008151808452614014816020860160208601613fd8565b601f01601f19169290920160200192915050565b6020815260006108126020830184613ffc565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261365c6080850182613ffc565b604080825283519082018190526000906020906060840190828701845b828110156140c45781516001600160401b03168452928401929084019060010161409f565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561411457601f1986840301855261410283835161403b565b948701949250908601906001016140e6565b50909998505050505050505050565b6000806040838503121561413657600080fd5b61413f83613e08565b915061414d60208401613e08565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061417c5761417c614156565b9052565b60208101610815828461416c565b600060a082840312156141a057600080fd5b6141a8613d18565b9050813581526141ba60208301613e08565b60208201526141cb60408301613e08565b60408201526141dc60608301613e08565b60608201526141ed60808301613e08565b608082015292915050565b8035613e1f81613df3565b803563ffffffff81168114613e1f57600080fd5b600082601f83011261422857600080fd5b81356020614238613e8383613dd0565b82815260059290921b8401810191818101908684111561425757600080fd5b8286015b848110156143275780356001600160401b038082111561427b5760008081fd5b9088019060a0828b03601f19018113156142955760008081fd5b61429d613d18565b87840135838111156142af5760008081fd5b6142bd8d8a83880101613e64565b8252506040808501356142cf81613df3565b828a015260606142e0868201614203565b828401526080915081860135858111156142fa5760008081fd5b6143088f8c838a0101613e64565b918401919091525091909301359083015250835291830191830161425b565b509695505050505050565b6000610140828403121561434557600080fd5b61434d613d3a565b9050614359838361418e565b815260a08201356001600160401b038082111561437557600080fd5b61438185838601613e64565b602084015260c084013591508082111561439a57600080fd5b6143a685838601613e64565b60408401526143b760e085016141f8565b606084015261010084013560808401526101208401359150808211156143dc57600080fd5b506143e984828501614217565b60a08301525092915050565b600082601f83011261440657600080fd5b81356020614416613e8383613dd0565b82815260059290921b8401810191818101908684111561443557600080fd5b8286015b848110156143275780356001600160401b038111156144585760008081fd5b6144668986838b0101614332565b845250918301918301614439565b600082601f83011261448557600080fd5b81356020614495613e8383613dd0565b82815260059290921b840181019181810190868411156144b457600080fd5b8286015b848110156143275780356001600160401b03808211156144d757600080fd5b818901915089603f8301126144eb57600080fd5b858201356144fb613e8382613dd0565b81815260059190911b830160400190878101908c83111561451b57600080fd5b604085015b838110156145545780358581111561453757600080fd5b6145468f6040838a0101613e64565b845250918901918901614520565b508752505050928401925083016144b8565b600082601f83011261457757600080fd5b81356020614587613e8383613dd0565b8083825260208201915060208460051b8701019350868411156145a957600080fd5b602086015b8481101561432757803583529183019183016145ae565b600082601f8301126145d657600080fd5b813560206145e6613e8383613dd0565b82815260059290921b8401810191818101908684111561460557600080fd5b8286015b848110156143275780356001600160401b03808211156146295760008081fd5b9088019060a0828b03601f19018113156146435760008081fd5b61464b613d18565b614656888501613e08565b81526040808501358481111561466c5760008081fd5b61467a8e8b838901016143f5565b8a84015250606080860135858111156146935760008081fd5b6146a18f8c838a0101614474565b83850152506080915081860135858111156146bc5760008081fd5b6146ca8f8c838a0101614566565b9184019190915250919093013590830152508352918301918301614609565b600080604083850312156146fc57600080fd5b6001600160401b038335111561471157600080fd5b61471e84843585016145c5565b91506001600160401b036020840135111561473857600080fd5b6020830135830184601f82011261474e57600080fd5b61475b613e838235613dd0565b81358082526020808301929160051b84010187101561477957600080fd5b602083015b6020843560051b85010181101561491f576001600160401b03813511156147a457600080fd5b87603f8235860101126147b657600080fd5b6147c9613e836020833587010135613dd0565b81358501602081810135808452908301929160059190911b016040018a10156147f157600080fd5b604083358701015b83358701602081013560051b0160400181101561490f576001600160401b038135111561482557600080fd5b833587018135016040818d03603f1901121561484057600080fd5b614848613d5c565b604082013581526001600160401b036060830135111561486757600080fd5b8c605f60608401358401011261487c57600080fd5b6040606083013583010135614893613e8382613dd0565b808282526020820191508f60608460051b60608801358801010111156148b857600080fd5b6060808601358601015b60608460051b6060880135880101018110156148ef576148e181614203565b8352602092830192016148c2565b5080602085015250505080855250506020830192506020810190506147f9565b508452506020928301920161477e565b508093505050509250929050565b60008083601f84011261493f57600080fd5b5081356001600160401b0381111561495657600080fd5b6020830191508360208260051b850101111561497157600080fd5b9250929050565b60008060008060006060868803121561499057600080fd5b85356001600160401b03808211156149a757600080fd5b6149b389838a01614332565b965060208801359150808211156149c957600080fd5b6149d589838a0161492d565b909650945060408801359150808211156149ee57600080fd5b506149fb8882890161492d565b969995985093965092949392505050565b600060808284031215614a1e57600080fd5b614a26613cf0565b8235614a3181613df3565b8152614a3f60208401614203565b60208201526040830135614a5281613e24565b60408201526060830135614a6581613df3565b60608201529392505050565b600060208284031215614a8357600080fd5b81356001600160401b03811115614a9957600080fd5b820160a08185031215613c1857600080fd5b803560ff81168114613e1f57600080fd5b600060208284031215614ace57600080fd5b61081282614aab565b60008151808452602080850194506020840160005b83811015614b115781516001600160a01b031687529582019590820190600101614aec565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614b6b60e0840182614ad7565b90506040840151601f198483030160c0850152614b888282614ad7565b95945050505050565b60008060408385031215614ba457600080fd5b614bad83613e08565b946020939093013593505050565b806040810183101561081557600080fd5b60008083601f840112614bde57600080fd5b5081356001600160401b03811115614bf557600080fd5b60208301915083602082850101111561497157600080fd5b60008060008060008060008060c0898b031215614c2957600080fd5b614c338a8a614bbb565b975060408901356001600160401b0380821115614c4f57600080fd5b614c5b8c838d01614bcc565b909950975060608b0135915080821115614c7457600080fd5b614c808c838d0161492d565b909750955060808b0135915080821115614c9957600080fd5b50614ca68b828c0161492d565b999c989b50969995989497949560a00135949350505050565b600060208284031215614cd157600080fd5b61081282613e08565b602081526000610812602083018461403b565b600060208284031215614cff57600080fd5b8135613c1881613df3565b600080600060608486031215614d1f57600080fd5b614d298585614bbb565b925060408401356001600160401b03811115614d4457600080fd5b614d5086828701614bcc565b9497909650939450505050565b600082601f830112614d6e57600080fd5b81356020614d7e613e8383613dd0565b8083825260208201915060208460051b870101935086841115614da057600080fd5b602086015b84811015614327578035614db881613df3565b8352918301918301614da5565b60006020808385031215614dd857600080fd5b82356001600160401b0380821115614def57600080fd5b818501915085601f830112614e0357600080fd5b8135614e11613e8382613dd0565b81815260059190911b83018401908481019088831115614e3057600080fd5b8585015b83811015613fcb57803585811115614e4b57600080fd5b860160c0818c03601f19011215614e625760008081fd5b614e6a613d3a565b8882013581526040614e7d818401614aab565b8a8301526060614e8e818501614aab565b8284015260809150614ea1828501613e32565b9083015260a08381013589811115614eb95760008081fd5b614ec78f8d83880101614d5d565b838501525060c0840135915088821115614ee15760008081fd5b614eef8e8c84870101614d5d565b9083015250845250918601918601614e34565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614f2c57607f821691505b602082108103614f4c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081557610815614f52565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680614fab57614fab614f7b565b92169190910692915050565b808202811582820484141761081557610815614f52565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261500160a0870182613ffc565b90506060850151868203606088015261501a8282613ffc565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561506f57835180516001600160a01b031683528601518683015292850192600192909201919084019061503d565b50979650505050505050565b6020815260006108126020830184614fce565b6080815260006150a16080830187614fce565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156150df57600080fd5b83516150ea81613e24565b60208501519093506001600160401b0381111561510657600080fd5b8401601f8101861361511757600080fd5b8051615125613e8382613e3d565b81815287602083850101111561513a57600080fd5b61514b826020830160208601613fd8565b809450505050604084015190509250925092565b80356001600160e01b0381168114613e1f57600080fd5b600082601f83011261518757600080fd5b81356020615197613e8383613dd0565b82815260069290921b840181019181810190868411156151b657600080fd5b8286015b8481101561432757604081890312156151d35760008081fd5b6151db613d5c565b6151e482613e08565b81526151f185830161515f565b818601528352918301916040016151ba565b600082601f83011261521457600080fd5b81356020615224613e8383613dd0565b82815260059290921b8401810191818101908684111561524357600080fd5b8286015b848110156143275780356001600160401b03808211156152675760008081fd5b9088019060a0828b03601f19018113156152815760008081fd5b615289613d18565b615294888501613e08565b8152604080850135848111156152aa5760008081fd5b6152b88e8b83890101613e64565b8a84015250606093506152cc848601613e08565b9082015260806152dd858201613e08565b93820193909352920135908201528352918301918301615247565b600082601f83011261530957600080fd5b81356020615319613e8383613dd0565b82815260069290921b8401810191818101908684111561533857600080fd5b8286015b8481101561432757604081890312156153555760008081fd5b61535d613d5c565b81358152848201358582015283529183019160400161533c565b6000602080838503121561538a57600080fd5b82356001600160401b03808211156153a157600080fd5b90840190606082870312156153b557600080fd5b6153bd613d7e565b8235828111156153cc57600080fd5b830160408189038113156153df57600080fd5b6153e7613d5c565b8235858111156153f657600080fd5b8301601f81018b1361540757600080fd5b8035615415613e8382613dd0565b81815260069190911b8201890190898101908d83111561543457600080fd5b928a01925b828410156154845785848f0312156154515760008081fd5b615459613d5c565b843561546481613df3565b8152615471858d0161515f565b818d0152825292850192908a0190615439565b84525050508287013591508482111561549c57600080fd5b6154a88a838501615176565b818801528352505082840135828111156154c157600080fd5b6154cd88828601615203565b858301525060408301359350818411156154e657600080fd5b6154f2878585016152f8565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561559257601f19868403018952815160a06001600160401b0380835116865286830151828888015261555683880182613ffc565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161551e565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526155c26060840186615501565b83810360408581019190915285518083528387019284019060005b81811015614114578451805184528601518684015293850193918301916001016155dd565b805160408084528151848201819052600092602091908201906060870190855b8181101561565957835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615622565b50508583015187820388850152805180835290840192506000918401905b8083101561506f57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615677565b6020815260006108126020830184615602565b6000602082840312156156d757600080fd5b8151613c1881613e24565b60008083546156f081614f18565b60018281168015615708576001811461571d5761574c565b60ff198416875282151583028701945061574c565b8760005260208060002060005b858110156157435781548a82015290840190820161572a565b50505082870194505b50929695505050505050565b6000815461576581614f18565b808552602060018381168015615782576001811461579c576157ca565b60ff1985168884015283151560051b8801830195506157ca565b866000528260002060005b858110156157c25781548a82018601529083019084016157a7565b890184019650505b505050505092915050565b6040815260006157e86040830185613ffc565b8281036020840152614b888185615758565b6001600160401b0381811683821601908082111561581a5761581a614f52565b5092915050565b6040815260006158346040830185615501565b8281036020840152614b888185615602565b60006020828403121561585857600080fd5b81356001600160401b0381111561586e57600080fd5b61365c848285016145c5565b601f821115610aaa576000816000526020600020601f850160051c810160208610156158a35750805b601f850160051c820191505b818110156158c2578281556001016158af565b505050505050565b81516001600160401b038111156158e3576158e3613cda565b6158f7816158f18454614f18565b8461587a565b602080601f83116001811461592c57600084156159145750858301515b600019600386901b1c1916600185901b1785556158c2565b600085815260208120601f198616915b8281101561595b5788860151825594840194600190910190840161593c565b50858210156159795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c1660608401525060808083015261081260a0830160018501615758565b60006001600160401b03808416806159f1576159f1614f7b565b92169190910492915050565b600060208284031215615a0f57600080fd5b61081282614203565b6000808335601e19843603018112615a2f57600080fd5b8301803591506001600160401b03821115615a4957600080fd5b60200191503681900382131561497157600080fd5b8082018082111561081557610815614f52565b60ff818116838216019081111561081557610815614f52565b8183823760009101908152919050565b828152604082602083013760600192915050565b6020810160068310615ac257615ac2614156565b91905290565b60ff818116838216029081169081811461581a5761581a614f52565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b3c5784546001600160a01b031683526001948501949284019201615b17565b50508481036060860152865180825290820192508187019060005b81811015615b7c5782516001600160a01b031685529383019391830191600101615b57565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614b886060830184613ffc565b82815260406020820152600061365c6040830184613ffc565b6001600160401b038481168252831660208201526060810161365c604083018461416c565b848152615c10602082018561416c565b608060408201526000615c266080830185613ffc565b905082606083015295945050505050565b600060208284031215615c4957600080fd5b8151613c1881613df3565b6020815260008251610100806020850152615c73610120850183613ffc565b91506020850151615c8f60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cc960a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615ce68483613ffc565b935060c08701519150808685030160e0870152615d038483613ffc565b935060e0870151915080868503018387015250615b8c8382613ffc565b6001600160a01b038316815260406020820152600061365c6040830184613ffc565b600060208284031215615d5457600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561559257601f19868403018952815160a08151818652615d9e82870182613ffc565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615dda8382613ffc565b6080948501519790940196909652505098840198925090830190600101615d78565b6020815260006108126020830184615d5b565b60008282518085526020808601955060208260051b8401016020860160005b8481101561559257601f19868403018952615e4a838351613ffc565b98840198925090830190600101615e2e565b60008151808452602080850194506020840160005b83811015614b1157815163ffffffff1687529582019590820190600101615e71565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615efb6101a0850183613ffc565b91506040870151605f198086850301610120870152615f1a8483613ffc565b935060608901519150615f37838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f608282615d5b565b9150508281036020840152615f758186615e0f565b90508281036040840152615b8c8185615e5c56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.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 59227bfa8cd..87fe6d67315 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 @@ -16,7 +16,7 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin c3cac2010c2815b484055bf981363a2bd04e7fbe7bb502dc8fd29a16165d221c multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin a523e11ea4c069d7d61b309c156951cc6834aff0f352bd1ac37c3a838ff2588f nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin e6008490d916826cefd1903612db39621d51617300fc9bb42b68c6c117958198 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 9d2c4805664a5609d781505aa1f6d365ec7c483be601c6191e0056d88ddb348b +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 5e79988d724bd73c74c6280373cec8f8920ef173e6ad934e01b80a112cad5b94 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 2bf74188a997218502031f177cb2df505b272d66b25fd341a741289e77380c59 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 24b4415a883a470d65c484be0fa20714a46b1c9262db205f1c958017820307b2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 0fc277a0b512db4e20b5a32a775b94ed2c0d342d8237511de78c94f7dacad428