{
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "linkToken",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "chainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "destChainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "defaultTxGasLimit",
              "type": "uint64"
            },
            {
              "internalType": "uint96",
              "name": "maxNopFeesJuels",
              "type": "uint96"
            },
            {
              "internalType": "address",
              "name": "prevOnRamp",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "armProxy",
              "type": "address"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.StaticConfig",
          "name": "staticConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "router",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "maxTokensLength",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "destGasPerPayloadByte",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "priceRegistry",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxDataSize",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "maxGasLimit",
              "type": "uint64"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
          "name": "dynamicConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            }
          ],
          "internalType": "struct Internal.PoolUpdate[]",
          "name": "tokensAndPools",
          "type": "tuple[]"
        },
        {
          "internalType": "address[]",
          "name": "allowlist",
          "type": "address[]"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isEnabled",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "capacity",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "rate",
              "type": "uint128"
            }
          ],
          "internalType": "struct RateLimiter.Config",
          "name": "rateLimiterConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "networkFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "minTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "maxTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gasMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "premiumMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
          "name": "feeTokenConfigs",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "ratio",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
          "name": "tokenTransferFeeConfigArgs",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "weight",
              "type": "uint16"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
          "name": "nopsAndWeights",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "capacity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requested",
          "type": "uint256"
        }
      ],
      "name": "AggregateValueMaxCapacityExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minWaitInSeconds",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "available",
          "type": "uint256"
        }
      ],
      "name": "AggregateValueRateLimitReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BadARMSignal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BucketOverfilled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "encodedAddress",
          "type": "bytes"
        }
      ],
      "name": "InvalidAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidConfig",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidExtraArgsTag",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "nop",
          "type": "address"
        }
      ],
      "name": "InvalidNopAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTokenPoolConfig",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidWithdrawParams",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LinkBalanceNotSettled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxFeeBalanceReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MessageGasLimitTooHigh",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSize",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actualSize",
          "type": "uint256"
        }
      ],
      "name": "MessageTooLarge",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MustBeCalledByRouter",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoFeesToPay",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoNopsToPay",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "NotAFeeToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyCallableByAdminOrOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyCallableByOwnerOrAdmin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyCallableByOwnerOrAdminOrNop",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PoolAlreadyAdded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "PoolDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "PriceNotFoundForToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RouterMustSetOriginalSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "capacity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requested",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "TokenMaxCapacityExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenPoolMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minWaitInSeconds",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "available",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "TokenRateLimitReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TooManyNops",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnsupportedNumberOfTokens",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "UnsupportedToken",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "AllowListAdd",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "AllowListEnabledSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "AllowListRemove",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint64",
              "name": "sourceChainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "sequenceNumber",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "feeTokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "strict",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Client.EVMTokenAmount[]",
              "name": "tokenAmounts",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "feeToken",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "messageId",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct Internal.EVM2EVMMessage",
          "name": "message",
          "type": "tuple"
        }
      ],
      "name": "CCIPSendRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "linkToken",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "chainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "destChainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "defaultTxGasLimit",
              "type": "uint64"
            },
            {
              "internalType": "uint96",
              "name": "maxNopFeesJuels",
              "type": "uint96"
            },
            {
              "internalType": "address",
              "name": "prevOnRamp",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "armProxy",
              "type": "address"
            }
          ],
          "indexed": false,
          "internalType": "struct EVM2EVMOnRamp.StaticConfig",
          "name": "staticConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "router",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "maxTokensLength",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "destGasPerPayloadByte",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "priceRegistry",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxDataSize",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "maxGasLimit",
              "type": "uint64"
            }
          ],
          "indexed": false,
          "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
          "name": "dynamicConfig",
          "type": "tuple"
        }
      ],
      "name": "ConfigSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "networkFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "minTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "maxTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gasMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "premiumMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "indexed": false,
          "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
          "name": "feeConfig",
          "type": "tuple[]"
        }
      ],
      "name": "FeeConfigSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "nop",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "NopPaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nopWeightsTotal",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "weight",
              "type": "uint16"
            }
          ],
          "indexed": false,
          "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
          "name": "nopsAndWeights",
          "type": "tuple[]"
        }
      ],
      "name": "NopsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "ratio",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
          "name": "transferFeeConfig",
          "type": "tuple[]"
        }
      ],
      "name": "TokenTransferFeeConfigSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "removes",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "adds",
          "type": "address[]"
        }
      ],
      "name": "applyAllowListUpdates",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            }
          ],
          "internalType": "struct Internal.PoolUpdate[]",
          "name": "removes",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            }
          ],
          "internalType": "struct Internal.PoolUpdate[]",
          "name": "adds",
          "type": "tuple[]"
        }
      ],
      "name": "applyPoolUpdates",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRateLimiterState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "tokens",
              "type": "uint128"
            },
            {
              "internalType": "uint32",
              "name": "lastUpdated",
              "type": "uint32"
            },
            {
              "internalType": "bool",
              "name": "isEnabled",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "capacity",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "rate",
              "type": "uint128"
            }
          ],
          "internalType": "struct RateLimiter.TokenBucket",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "receiver",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Client.EVMTokenAmount[]",
              "name": "tokenAmounts",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "feeToken",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "extraArgs",
              "type": "bytes"
            }
          ],
          "internalType": "struct Client.EVM2AnyMessage",
          "name": "message",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "feeTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "originalSender",
          "type": "address"
        }
      ],
      "name": "forwardFromRouter",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAllowList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAllowListEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDynamicConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "router",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "maxTokensLength",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "destGasPerPayloadByte",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "priceRegistry",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxDataSize",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "maxGasLimit",
              "type": "uint64"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
          "name": "dynamicConfig",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExpectedNextSequenceNumber",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "receiver",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Client.EVMTokenAmount[]",
              "name": "tokenAmounts",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "feeToken",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "extraArgs",
              "type": "bytes"
            }
          ],
          "internalType": "struct Client.EVM2AnyMessage",
          "name": "message",
          "type": "tuple"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getFeeTokenConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "networkFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "minTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "maxTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gasMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "premiumMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.FeeTokenConfig",
          "name": "feeTokenConfig",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNopFeesJuels",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNops",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "weight",
              "type": "uint16"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
          "name": "nopsAndWeights",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "weightsTotal",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "sourceToken",
          "type": "address"
        }
      ],
      "name": "getPoolBySourceToken",
      "outputs": [
        {
          "internalType": "contract IPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "getSenderNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStaticConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "linkToken",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "chainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "destChainSelector",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "defaultTxGasLimit",
              "type": "uint64"
            },
            {
              "internalType": "uint96",
              "name": "maxNopFeesJuels",
              "type": "uint96"
            },
            {
              "internalType": "address",
              "name": "prevOnRamp",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "armProxy",
              "type": "address"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.StaticConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSupportedTokens",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokenLimitAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenTransferFeeConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "ratio",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfig",
          "name": "tokenTransferFeeConfig",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "linkAvailableForPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "payNops",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "setAllowListEnabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "router",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "maxTokensLength",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "destGasPerPayloadByte",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "priceRegistry",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxDataSize",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "maxGasLimit",
              "type": "uint64"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
          "name": "dynamicConfig",
          "type": "tuple"
        }
      ],
      "name": "setDynamicConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "networkFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "minTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "maxTokenTransferFeeUSD",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gasMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "premiumMultiplier",
              "type": "uint64"
            },
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
          "name": "feeTokenConfigArgs",
          "type": "tuple[]"
        }
      ],
      "name": "setFeeTokenConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "weight",
              "type": "uint16"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
          "name": "nopsAndWeights",
          "type": "tuple[]"
        }
      ],
      "name": "setNops",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isEnabled",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "capacity",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "rate",
              "type": "uint128"
            }
          ],
          "internalType": "struct RateLimiter.Config",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "setRateLimiterConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "ratio",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "destGasOverhead",
              "type": "uint32"
            }
          ],
          "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
          "name": "tokenTransferFeeConfigArgs",
          "type": "tuple[]"
        }
      ],
      "name": "setTokenTransferFeeConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "typeAndVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "feeToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawNonLinkFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x6101806040526012805460ff60c01b191690553480156200001f57600080fd5b506040516200834538038062008345833981016040819052620000429162001e90565b8333806000816200009a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000cd57620000cd8162000369565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080909301839052600380546001600160a01b031916909417600160801b9283021760ff60a01b1916600160a01b90910217909255029091176004555087516001600160a01b0316158062000176575060208801516001600160401b0316155b806200018d575060408801516001600160401b0316155b80620001a4575060608801516001600160401b0316155b80620001bb575060c08801516001600160a01b0316155b15620001da576040516306b7c75960e31b815260040160405180910390fd5b6020808901516040808b015181517fbdd59ac4dd1d82276c9a9c5d2656546346b9dcdb1f9b4204aed4ec15c23d7d3a948101949094526001600160401b039283169184019190915216606082015230608082015260a00160408051601f19818403018152918152815160209283012060809081528a516001600160a01b0390811660e052928b01516001600160401b0390811661010052918b015182166101205260608b015190911660a0908152908a01516001600160601b031660c0908152908a01518216610140528901511661016052620002b78762000414565b620002c2836200059e565b620002cd8262000739565b620002d88162000810565b6040805160008082526020820190925262000323916200031b565b6040805180820190915260008082526020820152815260200190600190039081620002f35790505b508762000a3a565b8451156200035b576012805460ff60c81b1916600160c81b179055604080516000808252602082019092526200035b91508662000d3d565b505050505050505062002407565b336001600160a01b03821603620003c35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000091565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60808101516001600160a01b031662000440576040516306b7c75960e31b815260040160405180910390fd5b8051600580546020808501516040808701516060808901516001600160a01b039889166001600160b01b031990971696909617600160a01b61ffff95861681029190911765ffffffffffff60b01b1916600160b01b63ffffffff9485160261ffff60d01b191617600160d01b9590971694909402959095179095556080808801516006805460a0808c015160c0808e0151958d166001600160c01b0319909416939093179a16909602989098176001600160c01b0316600160c01b6001600160401b0393841602179055825160e08082018552518916815261010051821695810195909552610120518116858401528351169484019490945284516001600160601b031693830193909352610140518516908201526101605190931691830191909152517f72c6aaba4dde02f77d291123a76185c418ba63f8c217a2d56b08aec84e9bbfb8916200059391849062001fb3565b60405180910390a150565b60005b815181101562000707576000828281518110620005c257620005c26200207f565b6020908102919091018101516040805160c080820183528385015163ffffffff908116835283850151811683870190815260608087015183168587019081526080808901516001600160401b0390811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600f909a529690982094518554925198519151965194511515600160e01b0260ff60e01b19958916600160a01b0295909516600160a01b600160e81b0319979098166c0100000000000000000000000002600160601b600160a01b0319928516680100000000000000000292909216600160401b600160a01b0319998516640100000000026001600160401b0319909416919094161791909117969096161794909417919091169190911791909117905550620006ff81620020ab565b9050620005a1565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a881604051620005939190620020c7565b60005b8151811015620007de5760008282815181106200075d576200075d6200207f565b6020908102919091018101516040805180820182528284015161ffff90811682528284015163ffffffff90811683870190815294516001600160a01b03166000908152601090965292909420905181549351909216620100000265ffffffffffff19909316919093161717905550620007d681620020ab565b90506200073c565b507f4230c60a9725eb5fb992cf6a215398b4e81b4606d4a1e6be8dfe0b60dc172ec1816040516200059391906200217f565b805160408111156200083557604051635ad0867d60e11b815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff16158015906200087f575060125463ffffffff6c010000000000000000000000008204166001600160601b0390911610155b156200088f576200088f62000e88565b60006200089d600762001088565b90505b8015620008e9576000620008c3620008ba600184620021e0565b6007906200109b565b509050620008d3600782620010b9565b505080620008e190620021f6565b9050620008a0565b506000805b82811015620009d15760008482815181106200090e576200090e6200207f565b602002602001015160000151905060008583815181106200093357620009336200207f565b602002602001015160200151905060e0516001600160a01b0316826001600160a01b031614806200096b57506001600160a01b038216155b156200099657604051634de938d160e01b81526001600160a01b038316600482015260240162000091565b620009a860078361ffff8416620010d7565b50620009b961ffff82168562002210565b9350505080620009c990620020ab565b9050620008ee565b506012805463ffffffff60601b19166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd249062000a2d908390869062002230565b60405180910390a1505050565b60005b825181101562000b7657600083828151811062000a5e5762000a5e6200207f565b6020026020010151600001519050600084838151811062000a835762000a836200207f565b6020908102919091018101510151905062000aa0600a83620010f7565b62000aca576040516373913ebd60e01b81526001600160a01b038316600482015260240162000091565b6001600160a01b03811662000ae1600a846200110e565b6001600160a01b03161462000b0957604051630d98f73360e31b815260040160405180910390fd5b62000b16600a8362001125565b1562000b6057604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b50508062000b6e90620020ab565b905062000a3d565b5060005b815181101562000d3857600082828151811062000b9b5762000b9b6200207f565b6020026020010151600001519050600083838151811062000bc05762000bc06200207f565b602002602001015160200151905060006001600160a01b0316826001600160a01b0316148062000bf757506001600160a01b038116155b1562000c155760405162d8548360e71b815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c54573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c7a91906200229d565b6001600160a01b0316826001600160a01b03161462000cac57604051630d98f73360e31b815260040160405180910390fd5b62000cba600a83836200113c565b1562000d0957604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a162000d22565b604051633caf458560e01b815260040160405180910390fd5b50508062000d3090620020ab565b905062000b7a565b505050565b60005b825181101562000dd257600083828151811062000d615762000d616200207f565b6020908102919091010151905062000d7b600d8262001154565b1562000dbe576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5062000dca81620020ab565b905062000d40565b5060005b815181101562000d3857600082828151811062000df75762000df76200207f565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000e23575062000e75565b62000e30600d826200116b565b1562000e73576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b62000e8081620020ab565b905062000dd6565b6000546001600160a01b0316331480159062000eaf57506002546001600160a01b03163314155b801562000ec6575062000ec460073362001182565b155b1562000ee55760405163032bb72b60e31b815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff16600081900362000f215760405163990e30bf60e01b815260040160405180910390fd5b6012546001600160601b03168181101562000f4f576040516311a1ee3b60e31b815260040160405180910390fd5b600062000f5b62001199565b121562000f7b57604051631e9acf1760e31b815260040160405180910390fd5b80600062000f8a600762001088565b905060005b81811015620010625760008062000fa86007846200109b565b909250905060008762000fc5836001600160601b038a16620022bd565b62000fd19190620022d7565b905062000fdf8187620022fa565b60e05190965062001004906001600160a01b0316846001600160601b03841662001227565b6040516001600160601b03821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a2505050806200105a90620020ab565b905062000f8f565b5050601280546001600160601b0319166001600160601b03929092169190911790555050565b600062001095826200127f565b92915050565b6000808080620010ac86866200128c565b9097909650945050505050565b6000620010d0836001600160a01b038416620012b9565b9392505050565b6000620010ef846001600160a01b03851684620012d8565b949350505050565b6000620010d0836001600160a01b038416620012f7565b6000620010d0836001600160a01b03841662001305565b6000620010d0836001600160a01b03841662001313565b6000620010ef846001600160a01b0385168462001321565b6000620010d0836001600160a01b03841662001339565b6000620010d0836001600160a01b03841662001444565b6000620010d0836001600160a01b03841662001496565b60125460e0516040516370a0823160e01b81523060048201526000926001600160601b0316916001600160a01b0316906370a0823190602401602060405180830381865afa158015620011f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200121691906200231d565b62001222919062002337565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663a9059cbb60e01b1790915262000d38918591620014a416565b6000620010958262001575565b600080806200129c858562001580565b600081815260029690960160205260409095205494959350505050565b60008181526002830160205260408120819055620010d083836200158e565b60008281526002840160205260408120829055620010ef84846200159c565b6000620010d0838362001496565b6000620010d08383620015aa565b6000620010d08383620012b9565b6000620010ef84846001600160a01b038516620012d8565b600081815260018301602052604081205480156200143257600062001360600183620021e0565b85549091506000906200137690600190620021e0565b9050818114620013e25760008660000182815481106200139a576200139a6200207f565b9060005260206000200154905080876000018481548110620013c057620013c06200207f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620013f657620013f66200235a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062001095565b600091505062001095565b5092915050565b60008181526001830160205260408120546200148d5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562001095565b50600062001095565b6000620010d083836200161f565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620014f3906001600160a01b03851690849062001638565b80519091501562000d38578080602001905181019062001514919062002370565b62000d385760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000091565b600062001095825490565b6000620010d0838362001649565b6000620010d0838362001339565b6000620010d0838362001444565b600081815260028301602052604081205480151580620015d15750620015d1848462001496565b620010d05760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640162000091565b60008181526001830160205260408120541515620010d0565b6060620010ef848460008562001676565b60008260000182815481106200166357620016636200207f565b9060005260206000200154905092915050565b606082471015620016d95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000091565b600080866001600160a01b03168587604051620016f79190620023b4565b60006040518083038185875af1925050503d806000811462001736576040519150601f19603f3d011682016040523d82523d6000602084013e6200173b565b606091505b5090925090506200174f878383876200175a565b979650505050505050565b60608315620017ce578251600003620017c6576001600160a01b0385163b620017c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000091565b5081620010ef565b620010ef8383815115620017e55781518083602001fd5b8060405162461bcd60e51b8152600401620000919190620023d2565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156200183c576200183c62001801565b60405290565b604080519081016001600160401b03811182821017156200183c576200183c62001801565b604051606081016001600160401b03811182821017156200183c576200183c62001801565b604051601f8201601f191681016001600160401b0381118282101715620018b757620018b762001801565b604052919050565b6001600160a01b0381168114620018d557600080fd5b50565b8051620018e581620018bf565b919050565b80516001600160401b0381168114620018e557600080fd5b600060e082840312156200191557600080fd5b6200191f62001817565b905081516200192e81620018bf565b81526200193e60208301620018ea565b60208201526200195160408301620018ea565b60408201526200196460608301620018ea565b606082015260808201516001600160601b03811681146200198457600080fd5b60808201526200199760a08301620018d8565b60a0820152620019aa60c08301620018d8565b60c082015292915050565b805161ffff81168114620018e557600080fd5b805163ffffffff81168114620018e557600080fd5b600060e08284031215620019f057600080fd5b620019fa62001817565b9050815162001a0981620018bf565b815262001a1960208301620019b5565b602082015262001a2c60408301620019c8565b604082015262001a3f60608301620019b5565b6060820152608082015162001a5481620018bf565b608082015262001a6760a08301620019c8565b60a0820152620019aa60c08301620018ea565b60006001600160401b0382111562001a965762001a9662001801565b5060051b60200190565b600082601f83011262001ab257600080fd5b8151602062001acb62001ac58362001a7a565b6200188c565b82815260069290921b8401810191818101908684111562001aeb57600080fd5b8286015b8481101562001b45576040818903121562001b0a5760008081fd5b62001b1462001842565b815162001b2181620018bf565b81528185015162001b3281620018bf565b8186015283529183019160400162001aef565b509695505050505050565b600082601f83011262001b6257600080fd5b8151602062001b7562001ac58362001a7a565b82815260059290921b8401810191818101908684111562001b9557600080fd5b8286015b8481101562001b4557805162001baf81620018bf565b835291830191830162001b99565b80518015158114620018e557600080fd5b80516001600160801b0381168114620018e557600080fd5b60006060828403121562001bf957600080fd5b62001c0362001867565b905062001c108262001bbd565b815262001c206020830162001bce565b602082015262001c336040830162001bce565b604082015292915050565b600082601f83011262001c5057600080fd5b8151602062001c6362001ac58362001a7a565b82815260e0928302850182019282820191908785111562001c8357600080fd5b8387015b8581101562001d385781818a03121562001ca15760008081fd5b62001cab62001817565b815162001cb881620018bf565b815262001cc7828701620019c8565b86820152604062001cda818401620019c8565b90820152606062001ced838201620019c8565b90820152608062001d00838201620018ea565b9082015260a062001d13838201620018ea565b9082015260c062001d2683820162001bbd565b90820152845292840192810162001c87565b5090979650505050505050565b600082601f83011262001d5757600080fd5b8151602062001d6a62001ac58362001a7a565b8281526060928302850182019282820191908785111562001d8a57600080fd5b8387015b8581101562001d385781818a03121562001da85760008081fd5b62001db262001867565b815162001dbf81620018bf565b815262001dce828701620019b5565b86820152604062001de1818401620019c8565b90820152845292840192810162001d8e565b600082601f83011262001e0557600080fd5b8151602062001e1862001ac58362001a7a565b82815260069290921b8401810191818101908684111562001e3857600080fd5b8286015b8481101562001b45576040818903121562001e575760008081fd5b62001e6162001842565b815162001e6e81620018bf565b815262001e7d828601620019b5565b8186015283529183019160400162001e3c565b6000806000806000806000806102c0898b03121562001eae57600080fd5b62001eba8a8a62001902565b975062001ecb8a60e08b01620019dd565b6101c08a01519097506001600160401b038082111562001eea57600080fd5b62001ef88c838d0162001aa0565b97506101e08b015191508082111562001f1057600080fd5b62001f1e8c838d0162001b50565b965062001f308c6102008d0162001be6565b95506102608b015191508082111562001f4857600080fd5b62001f568c838d0162001c3e565b94506102808b015191508082111562001f6e57600080fd5b62001f7c8c838d0162001d45565b93506102a08b015191508082111562001f9457600080fd5b5062001fa38b828c0162001df3565b9150509295985092959890939650565b82516001600160a01b0390811682526020808501516001600160401b03908116828501526040808701518216818601526060808801518316818701526080808901516001600160601b03168188015260a0808a015187168189015260c0808b01518816818a01528951881660e08a01529589015161ffff9081166101008a01529389015163ffffffff9081166101208a015292890151909316610140880152870151909416610160860152850151909216610180840152830151166101a08201526101c08101620010d0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620020c057620020c062002095565b5060010190565b602080825282518282018190526000919060409081850190868401855b828110156200217257815180516001600160a01b031685528681015163ffffffff9081168887015286820151811687870152606080830151909116908601526080808201516001600160401b03169086015260a08082015162002151878301826001600160401b03169052565b505060c09081015115159085015260e09093019290850190600101620020e4565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200217257815180516001600160a01b031685528681015161ffff168786015285015163ffffffff1685850152606090930192908501906001016200219c565b8181038181111562001095576200109562002095565b60008162002208576200220862002095565b506000190190565b63ffffffff8181168382160190808211156200143d576200143d62002095565b6000604080830163ffffffff8616845260208281860152818651808452606087019150828801935060005b818110156200228f57845180516001600160a01b0316845284015161ffff168484015293830193918501916001016200225b565b509098975050505050505050565b600060208284031215620022b057600080fd5b8151620010d081620018bf565b808202811582820484141762001095576200109562002095565b600082620022f557634e487b7160e01b600052601260045260246000fd5b500490565b6001600160601b038281168282160390808211156200143d576200143d62002095565b6000602082840312156200233057600080fd5b5051919050565b81810360008312801583831316838312821617156200143d576200143d62002095565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156200238357600080fd5b620010d08262001bbd565b60005b83811015620023ab57818101518382015260200162002391565b50506000910152565b60008251620023c88184602087016200238e565b9190910192915050565b6020815260008251806020840152620023f38160408501602087016200238e565b601f01601f19169190910160400192915050565b60805160a05160c05160e05161010051610120516101405161016051615e376200250e600039600081816103600152818161148701526135700152600081816103310152818161139d01528181611405015281816119cc01528181611a34015261354901526000818161029d01528181610bcf01528181611dc401526134c301526000818161026d01528181611aff015261349901526000818161023e01528181610f320152818161177f015281816118780152818161237d015281816130380152818161347401526137000152600081816102fd0152818161194401526135130152600081816102cd015281816126c401526134ea01526000611cde0152615e376000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806376f6ae761161010f578063c92b2832116100a2578063e76c0b0611610071578063e76c0b0614610943578063efeadb6d14610956578063eff7cc4814610969578063f2fde38b1461097157600080fd5b8063c92b2832146108ed578063d09dc33914610900578063d3c7c2c714610908578063e0351e131461091057600080fd5b80639a113c36116100de5780639a113c3614610742578063a7cd63b7146108af578063a7d3e02f146108c4578063b06d41bc146108d757600080fd5b806376f6ae761461070357806379ba509714610716578063856c82471461071e5780638da5cb5b1461073157600080fd5b8063549e946f116101875780635d86f141116101565780635d86f141146105ae578063704b6c02146105c15780637132721a146105d45780637437ff9f146105e757600080fd5b8063549e946f1461054357806354b714681461055657806354c8a4f314610576578063599f64311461058957600080fd5b806338724a95116101c357806338724a951461048a5780633a87ac53146104ab5780634120fccd146104be578063546719cd146104df57600080fd5b806306285c69146101f55780631772047e146103a6578063181f5a771461042c578063352e4bc814610475575b600080fd5b6103906040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b60405161039d919061499d565b60405180910390f35b6104076103b4366004614a2e565b6040805180820190915260008082526020820152506001600160a01b031660009081526010602090815260409182902082518084019093525461ffff8116835262010000900463ffffffff169082015290565b60408051825161ffff16815260209283015163ffffffff16928101929092520161039d565b6104686040518060400160405280601381526020017f45564d3245564d4f6e52616d7020312e312e300000000000000000000000000081525081565b60405161039d9190614ab9565b610488610483366004614c1a565b610984565b005b61049d610498366004614d50565b6109ed565b60405190815260200161039d565b6104886104b9366004614e21565b610dd9565b6104c6610def565b60405167ffffffffffffffff909116815260200161039d565b6104e7610e23565b60405161039d919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b610488610551366004614e85565b610ed3565b6012546040516bffffffffffffffffffffffff909116815260200161039d565b610488610584366004614f22565b611088565b6002546001600160a01b03165b6040516001600160a01b03909116815260200161039d565b6105966105bc366004614a2e565b61109a565b6104886105cf366004614a2e565b6110f9565b6104886105e2366004614f8e565b6111c3565b6106f66040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e0810182526005546001600160a01b03808216835261ffff740100000000000000000000000000000000000000008084048216602086015263ffffffff76010000000000000000000000000000000000000000000085048116968601969096527a010000000000000000000000000000000000000000000000000000909304166060840152600654908116608084015290810490921660a082015267ffffffffffffffff78010000000000000000000000000000000000000000000000009092049190911660c082015290565b60405161039d9190615026565b6104886107113660046150a1565b6111d4565b61048861128c565b6104c661072c366004614a2e565b61136f565b6000546001600160a01b0316610596565b610845610750366004614a2e565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b03166000908152600f6020908152604091829020825160c081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081049092169281019290925267ffffffffffffffff6c0100000000000000000000000082048116606084015274010000000000000000000000000000000000000000820416608083015260ff7c010000000000000000000000000000000000000000000000000000000090910416151560a082015290565b60405161039d9190600060c08201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015167ffffffffffffffff8082166060850152806080860151166080850152505060a0830151151560a083015292915050565b6108b7611477565b60405161039d9190615116565b61049d6108d2366004615163565b611483565b6108df611eab565b60405161039d929190615211565b6104886108fb366004615253565b611faf565b61049d612017565b6108b7612021565b601254790100000000000000000000000000000000000000000000000000900460ff16604051901515815260200161039d565b6104886109513660046152a3565b6120d2565b61048861096436600461536c565b612138565b6104886121be565b61048861097f366004614a2e565b612455565b6000546001600160a01b031633148015906109aa57506002546001600160a01b03163314155b156109e1576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea81612466565b50565b600080610a05610a006080850185615389565b612695565b9050610a30610a176020850185615389565b8351909150610a2960408701876153ee565b9050612789565b6000600f81610a456080870160608801614a2e565b6001600160a01b031681526020808201929092526040908101600020815160c081018352905463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316918101919091526c01000000000000000000000000820467ffffffffffffffff90811660608301527401000000000000000000000000000000000000000083041660808201527c010000000000000000000000000000000000000000000000000000000090910460ff16151560a08201819052909150610b6257610b1f6080850160608601614a2e565b6040517fa7499d200000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b60065460009081906001600160a01b031663ffdb4b37610b886080890160608a01614a2e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044016040805180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c37919061547e565b909250905060008080610c4d60408a018a6153ee565b90501115610c8657610c7c610c6860808a0160608b01614a2e565b85610c7660408c018c6153ee565b896128ae565b9092509050610ca2565b8451610c9f9063ffffffff16662386f26fc100006154e0565b91505b6080850151610cbb9067ffffffffffffffff16836154e0565b606086015160055491935060009167ffffffffffffffff9091169063ffffffff8416907a010000000000000000000000000000000000000000000000000000900461ffff16610d0d60208d018d615389565b610d189291506154e0565b6005548a51610d4791760100000000000000000000000000000000000000000000900463ffffffff16906154f7565b610d5191906154f7565b610d5b91906154f7565b610d6591906154e0565b610d899077ffffffffffffffffffffffffffffffffffffffffffffffff86166154e0565b9050610dcc670de0b6b3a7640000610da183866154f7565b610dab919061550a565b77ffffffffffffffffffffffffffffffffffffffffffffffff871690612b34565b9998505050505050505050565b610de1612b6d565b610deb8282612be3565b5050565b601254600090610e1e90700100000000000000000000000000000000900467ffffffffffffffff166001615545565b905090565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610e1e90612f43565b6000546001600160a01b03163314801590610ef957506002546001600160a01b03163314155b15610f30576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610f7757506001600160a01b038116155b15610fae576040517f232cb97f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb8612ff5565b1215610ff0576040517f02075e0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610deb9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190615566565b6001600160a01b03851691906130b5565b611090612b6d565b610deb8282613135565b60006110a7600a83613270565b6110e8576040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6110f3600a83613285565b92915050565b6000546001600160a01b0316331480159061111f57506002546001600160a01b03163314155b15611156576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c906020015b60405180910390a150565b6111cb612b6d565b6109ea8161329a565b6000546001600160a01b031633148015906111fa57506002546001600160a01b03163314155b15611231576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610deb8282808060200260200160405190810160405280939291908181526020016000905b82821015611282576112736040830286013681900381019061557f565b81526020019060010190611256565b50505050506135c7565b6001546001600160a01b03163314611300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610b59565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b03811660009081526011602052604081205467ffffffffffffffff16801580156113c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b156110f3576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147091906155be565b9392505050565b6060610e1e600d61383a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150791906155db565b1561153e576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661157e576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254790100000000000000000000000000000000000000000000000000900460ff1680156115b557506115b3600d83613847565b155b156115f7576040517fd0d259760000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6005546001600160a01b0316331461163b576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116458480615389565b905060201461168c576116588480615389565b6040517f370d875f000000000000000000000000000000000000000000000000000000008152600401610b59929190615641565b60006116988580615389565b8101906116a59190615655565b90506001600160a01b038111806116bc5750600a81105b156116cb576116588580615389565b60006116dd610a006080880188615389565b90506117016116ef6020880188615389565b8351909150610a2960408a018a6153ee565b61177561171160408801886153ee565b808060200260200160405190810160405280939291908181526020016000905b8282101561175d5761174e6040830286013681900381019061566e565b81526020019060010190611731565b50506006546001600160a01b03169250613869915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117af6080880160608901614a2e565b6001600160a01b03160361181357601280548691906000906117e09084906bffffffffffffffffffffffff166156a8565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611932565b6006546001600160a01b03166241e5be6118336080890160608a01614a2e565b60405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039182166004820152602481018990527f00000000000000000000000000000000000000000000000000000000000000009091166044820152606401602060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190615566565b601280546000906119039084906bffffffffffffffffffffffff166156a8565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b6012546bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169116111561199f576040517fe5c7a49100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526011602052604090205467ffffffffffffffff161580156119f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611aef576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f91906155be565b6001600160a01b038516600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555b60006040518061018001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020016012601081819054906101000a900467ffffffffffffffff16611b4f906156cd565b825467ffffffffffffffff9182166101009390930a8381029083021990911617909255825260208083018a90526001600160a01b03891660408085018290526000918252601190925290812080546060909401939092611baf91166156cd565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff16815260200183600001518152602001600015158152602001846001600160a01b03168152602001888060200190611c159190615389565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001611c5c60408a018a6153ee565b808060200260200160405190810160405280939291908181526020016000905b82821015611ca857611c996040830286013681900381019061566e565b81526020019060010190611c7c565b5050509183525050602001611cc360808a0160608b01614a2e565b6001600160a01b0316815260006020909101529050611d02817f0000000000000000000000000000000000000000000000000000000000000000613a1c565b61016082015260005b611d1860408901896153ee565b9050811015611e64576000611d3060408a018a6153ee565b83818110611d4057611d406156f4565b905060400201803603810190611d56919061566e565b9050611d65816000015161109a565b6001600160a01b0316639687544588611d7e8c80615389565b60208087015160408051928301815260008352517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152611dec959493927f000000000000000000000000000000000000000000000000000000000000000091600401615723565b6000604051808303816000875af1158015611e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e51919081019061576e565b505080611e5d90615820565b9050611d0b565b507faffc45517195d6499808c643bd4a7b0ffeedf95bea5852840d7bfcf63f59e82181604051611e94919061589c565b60405180910390a161016001519695505050505050565b6060600080611eba6007613b26565b90508067ffffffffffffffff811115611ed557611ed5614acc565b604051908082528060200260200182016040528015611f1a57816020015b6040805180820190915260008082526020820152815260200190600190039081611ef35790505b50925060005b81811015611f8c57600080611f36600784613b31565b915091506040518060400160405280836001600160a01b031681526020018261ffff16815250868481518110611f6e57611f6e6156f4565b6020026020010181905250505080611f8590615820565b9050611f20565b505060125491926c0100000000000000000000000090920463ffffffff16919050565b6000546001600160a01b03163314801590611fd557506002546001600160a01b03163314155b1561200c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea600382613b4f565b6000610e1e612ff5565b6060600061202f600a613d27565b67ffffffffffffffff81111561204757612047614acc565b604051908082528060200260200182016040528015612070578160200160208202803683370190505b50905060005b81518110156120cc5761208a600a82613d32565b5082828151811061209d5761209d6156f4565b60200260200101816001600160a01b03166001600160a01b031681525050806120c590615820565b9050612076565b50919050565b6000546001600160a01b031633148015906120f857506002546001600160a01b03163314155b1561212f576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea81613d41565b612140612b6d565b60128054821515790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fccf4daf6ab6430389f26b970595dab82a5881ad454770907e415ede27c8df032906111b890831515815260200190565b6000546001600160a01b031633148015906121e457506002546001600160a01b03163314155b80156121f857506121f6600733613e28565b155b1561222f576040517f195db95800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff166000819003612283576040517f990e30bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546bffffffffffffffffffffffff16818110156122ce576040517f8d0f71d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122d8612ff5565b1215612310576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600061231d6007613b26565b905060005b8181101561241257600080612338600784613b31565b9092509050600087612358836bffffffffffffffffffffffff8a166154e0565b612362919061550a565b905061236e81876159d9565b95506123b26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016846bffffffffffffffffffffffff84166130b5565b6040516bffffffffffffffffffffffff821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a25050508061240b90615820565b9050612322565b5050601280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790555050565b61245d612b6d565b6109ea81613e3d565b60005b8151811015612665576000828281518110612486576124866156f4565b6020908102919091018101516040805160c080820183528385015163ffffffff9081168352838501518116838701908152606080870151831685870190815260808089015167ffffffffffffffff90811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600f909a5296909820945185549251985191519651945115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9589167401000000000000000000000000000000000000000002959095167fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff979098166c01000000000000000000000000027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff9285166801000000000000000002929092167fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff998516640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941691909416179190911796909616179490941791909116919091179190911790555061265e81615820565b9050612469565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516111b891906159fe565b60408051602081019091526000815260008290036126eb5750604080516020810190915267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526110f3565b7f97a657c9000000000000000000000000000000000000000000000000000000006127168385615ab5565b7fffffffff00000000000000000000000000000000000000000000000000000000161461276f576040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277c8260048186615afd565b8101906114709190615b27565b60065474010000000000000000000000000000000000000000900463ffffffff16808411156127ee576040517f869337890000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610b59565b6006547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16831115612850576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055474010000000000000000000000000000000000000000900461ffff168211156128a8576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60008083815b81811015612ac05760008787838181106128d0576128d06156f4565b9050604002018036038101906128e6919061566e565b80516001600160a01b031660009081526010602090815260409182902082518084019093525461ffff8116835263ffffffff620100009091048116918301919091528251929350909161293d91600a919061327016565b6129815781516040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b59565b805160009061ffff1615612a8e5760008c6001600160a01b031684600001516001600160a01b031614612a3d5760065484516040517f4ab35b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911690634ab35b0b90602401602060405180830381865afa158015612a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a369190615b69565b9050612a40565b508a5b82516020850151620186a09161ffff1690612a769077ffffffffffffffffffffffffffffffffffffffffffffffff851690613f18565b612a8091906154e0565b612a8a919061550a565b9150505b612a9881886154f7565b9650816020015186612aaa9190615b84565b955050505080612ab990615820565b90506128b4565b506000846020015163ffffffff16662386f26fc10000612ae091906154e0565b905080841015612af3579250612b2a9050565b6000856040015163ffffffff16662386f26fc10000612b1291906154e0565b905080851115612b26579350612b2a915050565b5050505b9550959350505050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff8316612b6383670de0b6b3a76400006154e0565b611470919061550a565b6000546001600160a01b03163314612be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b59565b565b60005b8251811015612d44576000838281518110612c0357612c036156f4565b60200260200101516000015190506000848381518110612c2557612c256156f4565b6020026020010151602001519050612c4782600a61327090919063ffffffff16565b612c88576040517f73913ebd0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6001600160a01b038116612c9d600a84613285565b6001600160a01b031614612cdd576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ce8600a83613f47565b15612d3157604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b505080612d3d90615820565b9050612be6565b5060005b8151811015612f3e576000828281518110612d6557612d656156f4565b60200260200101516000015190506000838381518110612d8757612d876156f4565b602002602001015160200151905060006001600160a01b0316826001600160a01b03161480612dbd57506001600160a01b038116155b15612df4576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e569190615ba1565b6001600160a01b0316826001600160a01b031614612ea0576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eac600a8383613f5c565b15612ef957604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1612f2b565b6040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505080612f3790615820565b9050612d48565b505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152612fd182606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642612fb59190615bbe565b85608001516fffffffffffffffffffffffffffffffff16613f7a565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6012546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916bffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ab9190615566565b610e1e9190615bd1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612f3e908490613fa2565b60005b82518110156131c6576000838281518110613155576131556156f4565b6020026020010151905061317381600d6140a190919063ffffffff16565b156131b5576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506131bf81615820565b9050613138565b5060005b8151811015612f3e5760008282815181106131e7576131e76156f4565b6020026020010151905060006001600160a01b0316816001600160a01b0316036132115750613260565b61321c600d826140b6565b1561325e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b61326981615820565b90506131ca565b6000611470836001600160a01b0384166140cb565b6000611470836001600160a01b0384166140d7565b60808101516001600160a01b03166132de576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600580546020808501516040808701516060808901516001600160a01b039889167fffffffffffffffffffff00000000000000000000000000000000000000000000909716969096177401000000000000000000000000000000000000000061ffff9586168102919091177fffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000063ffffffff948516027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009590971694909402959095179095556080808801516006805460a0808c015160c0808e0151958d167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093179a169096029890981777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93841602179055825160e0810184527f0000000000000000000000000000000000000000000000000000000000000000891681527f00000000000000000000000000000000000000000000000000000000000000008216958101959095527f00000000000000000000000000000000000000000000000000000000000000008116858401527f000000000000000000000000000000000000000000000000000000000000000016948401949094527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16938301939093527f00000000000000000000000000000000000000000000000000000000000000008516908201527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517f72c6aaba4dde02f77d291123a76185c418ba63f8c217a2d56b08aec84e9bbfb8916111b8918490615bf1565b80516040811115613604576040517fb5a10cfa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff1615801590613652575060125463ffffffff6c010000000000000000000000008204166bffffffffffffffffffffffff90911610155b1561365f5761365f6121be565b600061366b6007613b26565b90505b80156136ad57600061368c613684600184615bbe565b600790613b31565b50905061369a6007826140e3565b5050806136a690615ce6565b905061366e565b506000805b828110156137bb5760008482815181106136ce576136ce6156f4565b602002602001015160000151905060008583815181106136f0576136f06156f4565b60200260200101516020015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061374557506001600160a01b038216155b15613787576040517f4de938d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b61379760078361ffff84166140f8565b506137a661ffff821685615b84565b93505050806137b490615820565b90506136b2565b50601280547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd249061382d9083908690615d1b565b60405180910390a1505050565b606060006114708361410e565b6001600160a01b03811660009081526001830160205260408120541515611470565b81516000805b82811015613a0e576000846001600160a01b031663d02641a087848151811061389a5761389a6156f4565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015613901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139259190615d3a565b51905077ffffffffffffffffffffffffffffffffffffffffffffffff81166000036139a65785828151811061395c5761395c6156f4565b6020908102919091010151516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b59565b6139f08683815181106139bb576139bb6156f4565b6020026020010151602001518277ffffffffffffffffffffffffffffffffffffffffffffffff16613f1890919063ffffffff16565b6139fa90846154f7565b92505080613a0790615820565b905061386f565b506128a8600382600061416a565b60008060001b828460200151856080015186606001518760e0015188610100015180519060200120896101200151604051602001613a5a9190615d6d565b604051602081830303815290604052805190602001208a60a001518b60c001518c61014001518d60400151604051602001613b089c9b9a999897969594939291909b8c5260208c019a909a5267ffffffffffffffff98891660408c01529690971660608a01526001600160a01b0394851660808a015292841660a089015260c088019190915260e0870152610100860152911515610120850152166101408301526101608201526101800190565b60405160208183030381529060405280519060200120905092915050565b60006110f3826144b9565b6000808080613b4086866144c4565b909450925050505b9250929050565b8154600090613b7890700100000000000000000000000000000000900463ffffffff1642615bbe565b90508015613c1a5760018301548354613bc0916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613f7a565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354613c40916fffffffffffffffffffffffffffffffff90811691166144ef565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061382d9084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60006110f382613b26565b6000808080613b408686613b31565b60005b8151811015613df8576000828281518110613d6157613d616156f4565b6020908102919091018101516040805180820182528284015161ffff90811682528284015163ffffffff90811683870190815294516001600160a01b0316600090815260109096529290942090518154935190921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316919093161717905550613df181615820565b9050613d44565b507f4230c60a9725eb5fb992cf6a215398b4e81b4606d4a1e6be8dfe0b60dc172ec1816040516111b89190615d80565b6000611470836001600160a01b038416614505565b336001600160a01b03821603613eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b59565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000670de0b6b3a7640000612b638377ffffffffffffffffffffffffffffffffffffffffffffffff86166154e0565b6000611470836001600160a01b038416614511565b6000613f72846001600160a01b0385168461451d565b949350505050565b6000613f9985613f8a84866154e0565b613f9490876154f7565b6144ef565b95945050505050565b6000613ff7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145339092919063ffffffff16565b805190915015612f3e578080602001905181019061401591906155db565b612f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b59565b6000611470836001600160a01b038416614542565b6000611470836001600160a01b03841661463c565b60006114708383614505565b6000611470838361468b565b6000611470836001600160a01b038416614715565b6000613f72846001600160a01b03851684614732565b60608160000180548060200260200160405190810160405280929190818152602001828054801561415e57602002820191906000526020600020905b81548152602001906001019080831161414a575b50505050509050919050565b825474010000000000000000000000000000000000000000900460ff161580614191575081155b1561419b57505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906141e190700100000000000000000000000000000000900463ffffffff1642615bbe565b905080156142a15781831115614223576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461425d9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613f7a565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561433e576001600160a01b0384166142f3576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610b59565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b0385166044820152606401610b59565b848310156144375760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906143829082615bbe565b61438c878a615bbe565b61439691906154f7565b6143a0919061550a565b90506001600160a01b0386166143ec576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610b59565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b0387166044820152606401610b59565b6144418584615bbe565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b60006110f38261474f565b600080806144d28585614759565b600081815260029690960160205260409095205494959350505050565b60008183106144fe5781611470565b5090919050565b60006114708383614765565b60006114708383614715565b6000613f7284846001600160a01b038516614732565b6060613f72848460008561477d565b6000818152600183016020526040812054801561462b576000614566600183615bbe565b855490915060009061457a90600190615bbe565b90508181146145df57600086600001828154811061459a5761459a6156f4565b90600052602060002001549050808760000184815481106145bd576145bd6156f4565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615ddf565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506110f3565b60009150506110f3565b5092915050565b6000818152600183016020526040812054614683575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556110f3565b5060006110f3565b6000818152600283016020526040812054801515806146af57506146af8484614505565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b59565b600081815260028301602052604081208190556114708383614889565b60008281526002840160205260408120829055613f728484614895565b60006110f3825490565b600061147083836148a1565b60008181526001830160205260408120541515611470565b60608247101561480f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b59565b600080866001600160a01b0316858760405161482b9190615e0e565b60006040518083038185875af1925050503d8060008114614868576040519150601f19603f3d011682016040523d82523d6000602084013e61486d565b606091505b509150915061487e878383876148cb565b979650505050505050565b60006114708383614542565b6000611470838361463c565b60008260000182815481106148b8576148b86156f4565b9060005260206000200154905092915050565b6060831561495457825160000361494d576001600160a01b0385163b61494d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b59565b5081613f72565b613f7283838151156149695781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b599190614ab9565b60e081016110f382846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b6001600160a01b03811681146109ea57600080fd5b600060208284031215614a4057600080fd5b813561147081614a19565b60005b83811015614a66578181015183820152602001614a4e565b50506000910152565b60008151808452614a87816020860160208601614a4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006114706020830184614a6f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b60405290565b6040805190810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b6040516060810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614bb157614bb1614acc565b604052919050565b600067ffffffffffffffff821115614bd357614bd3614acc565b5060051b60200190565b803563ffffffff81168114614bf157600080fd5b919050565b67ffffffffffffffff811681146109ea57600080fd5b80151581146109ea57600080fd5b60006020808385031215614c2d57600080fd5b823567ffffffffffffffff811115614c4457600080fd5b8301601f81018513614c5557600080fd5b8035614c68614c6382614bb9565b614b6a565b81815260e09182028301840191848201919088841115614c8757600080fd5b938501935b83851015614d325780858a031215614ca45760008081fd5b614cac614afb565b8535614cb781614a19565b8152614cc4868801614bdd565b878201526040614cd5818801614bdd565b908201526060614ce6878201614bdd565b90820152608086810135614cf981614bf6565b9082015260a086810135614d0c81614bf6565b9082015260c086810135614d1f81614c0c565b9082015283529384019391850191614c8c565b50979650505050505050565b600060a082840312156120cc57600080fd5b600060208284031215614d6257600080fd5b813567ffffffffffffffff811115614d7957600080fd5b613f7284828501614d3e565b600082601f830112614d9657600080fd5b81356020614da6614c6383614bb9565b82815260069290921b84018101918181019086841115614dc557600080fd5b8286015b84811015614e165760408189031215614de25760008081fd5b614dea614b24565b8135614df581614a19565b815281850135614e0481614a19565b81860152835291830191604001614dc9565b509695505050505050565b60008060408385031215614e3457600080fd5b823567ffffffffffffffff80821115614e4c57600080fd5b614e5886838701614d85565b93506020850135915080821115614e6e57600080fd5b50614e7b85828601614d85565b9150509250929050565b60008060408385031215614e9857600080fd5b8235614ea381614a19565b91506020830135614eb381614a19565b809150509250929050565b600082601f830112614ecf57600080fd5b81356020614edf614c6383614bb9565b82815260059290921b84018101918181019086841115614efe57600080fd5b8286015b84811015614e16578035614f1581614a19565b8352918301918301614f02565b60008060408385031215614f3557600080fd5b823567ffffffffffffffff80821115614f4d57600080fd5b614f5986838701614ebe565b93506020850135915080821115614f6f57600080fd5b50614e7b85828601614ebe565b803561ffff81168114614bf157600080fd5b600060e08284031215614fa057600080fd5b614fa8614afb565b8235614fb381614a19565b8152614fc160208401614f7c565b6020820152614fd260408401614bdd565b6040820152614fe360608401614f7c565b60608201526080830135614ff681614a19565b608082015261500760a08401614bdd565b60a082015260c083013561501a81614bf6565b60c08201529392505050565b60e081016110f382846001600160a01b03808251168352602082015161ffff80821660208601526040840151915063ffffffff80831660408701528160608601511660608701528360808601511660808701528060a08601511660a08701525050505067ffffffffffffffff60c08201511660c08301525050565b600080602083850312156150b457600080fd5b823567ffffffffffffffff808211156150cc57600080fd5b818501915085601f8301126150e057600080fd5b8135818111156150ef57600080fd5b8660208260061b850101111561510457600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156151575783516001600160a01b031683529284019291840191600101615132565b50909695505050505050565b60008060006060848603121561517857600080fd5b833567ffffffffffffffff81111561518f57600080fd5b61519b86828701614d3e565b9350506020840135915060408401356151b381614a19565b809150509250925092565b600081518084526020808501945080840160005b8381101561520657815180516001600160a01b0316885283015161ffff1683880152604090960195908201906001016151d2565b509495945050505050565b60408152600061522460408301856151be565b90508260208301529392505050565b80356fffffffffffffffffffffffffffffffff81168114614bf157600080fd5b60006060828403121561526557600080fd5b61526d614b47565b823561527881614c0c565b815261528660208401615233565b602082015261529760408401615233565b60408201529392505050565b600060208083850312156152b657600080fd5b823567ffffffffffffffff8111156152cd57600080fd5b8301601f810185136152de57600080fd5b80356152ec614c6382614bb9565b8181526060918202830184019184820191908884111561530b57600080fd5b938501935b83851015614d325780858a0312156153285760008081fd5b615330614b47565b853561533b81614a19565b8152615348868801614f7c565b878201526040615359818801614bdd565b9082015283529384019391850191615310565b60006020828403121561537e57600080fd5b813561147081614c0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126153be57600080fd5b83018035915067ffffffffffffffff8211156153d957600080fd5b602001915036819003821315613b4857600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261542357600080fd5b83018035915067ffffffffffffffff82111561543e57600080fd5b6020019150600681901b3603821315613b4857600080fd5b805177ffffffffffffffffffffffffffffffffffffffffffffffff81168114614bf157600080fd5b6000806040838503121561549157600080fd5b61549a83615456565b91506154a860208401615456565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176110f3576110f36154b1565b808201808211156110f3576110f36154b1565b600082615540577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b67ffffffffffffffff818116838216019080821115614635576146356154b1565b60006020828403121561557857600080fd5b5051919050565b60006040828403121561559157600080fd5b615599614b24565b82356155a481614a19565b81526155b260208401614f7c565b60208201529392505050565b6000602082840312156155d057600080fd5b815161147081614bf6565b6000602082840312156155ed57600080fd5b815161147081614c0c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613f726020830184866155f8565b60006020828403121561566757600080fd5b5035919050565b60006040828403121561568057600080fd5b615688614b24565b823561569381614a19565b81526020928301359281019290925250919050565b6bffffffffffffffffffffffff818116838216019080821115614635576146356154b1565b600067ffffffffffffffff8083168181036156ea576156ea6154b1565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b038716815260a06020820152600061574660a0830187896155f8565b85604084015267ffffffffffffffff851660608401528281036080840152610dcc8185614a6f565b60006020828403121561578057600080fd5b815167ffffffffffffffff8082111561579857600080fd5b818401915084601f8301126157ac57600080fd5b8151818111156157be576157be614acc565b6157ef60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614b6a565b915080825285602082850101111561580657600080fd5b615817816020840160208601614a4b565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615851576158516154b1565b5060010190565b600081518084526020808501945080840160005b8381101561520657815180516001600160a01b03168852830151838801526040909601959082019060010161586c565b602081526158b760208201835167ffffffffffffffff169052565b600060208301516158d4604084018267ffffffffffffffff169052565b506040830151606083015260608301516158f960808401826001600160a01b03169052565b50608083015167ffffffffffffffff811660a08401525060a083015160c083015260c083015161592d60e084018215159052565b5060e083015161010061594a818501836001600160a01b03169052565b80850151915050610180610120818186015261596a6101a0860184614a6f565b92508086015190506101407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086850301818701526159a88483615858565b9350808701519150506101606159c8818701836001600160a01b03169052565b959095015193019290925250919050565b6bffffffffffffffffffffffff828116828216039080821115614635576146356154b1565b602080825282518282018190526000919060409081850190868401855b82811015615aa857815180516001600160a01b031685528681015163ffffffff90811688870152868201518116878701526060808301519091169086015260808082015167ffffffffffffffff169086015260a080820151615a888288018267ffffffffffffffff169052565b505060c09081015115159085015260e09093019290850190600101615a1b565b5091979650505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015615af55780818660040360031b1b83161692505b505092915050565b60008085851115615b0d57600080fd5b83861115615b1a57600080fd5b5050820193919092039150565b600060208284031215615b3957600080fd5b6040516020810181811067ffffffffffffffff82111715615b5c57615b5c614acc565b6040529135825250919050565b600060208284031215615b7b57600080fd5b61147082615456565b63ffffffff818116838216019080821115614635576146356154b1565b600060208284031215615bb357600080fd5b815161147081614a19565b818103818111156110f3576110f36154b1565b8181036000831280158383131683831282161715614635576146356154b1565b6101c08101615c6e82856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b82516001600160a01b0390811660e0840152602084015161ffff908116610100850152604085015163ffffffff9081166101208601526060860151909116610140850152608085015190911661016084015260a08401511661018083015260c083015167ffffffffffffffff166101a0830152611470565b600081615cf557615cf56154b1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b63ffffffff83168152604060208201526000613f7260408301846151be565b600060408284031215615d4c57600080fd5b615d54614b24565b615d5d83615456565b815260208301516155b281614bf6565b6020815260006114706020830184615858565b602080825282518282018190526000919060409081850190868401855b82811015615aa857815180516001600160a01b031685528681015161ffff168786015285015163ffffffff168585015260609093019290850190600101615d9d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615e20818460208701614a4b565b919091019291505056fea164736f6c6343000813000a",
    "sourceMap": "1585:37111:49:-:0;;;10352:29;;;-1:-1:-1;;;;10352:29:49;;;10537:1640;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10941:17;291:10:116;;345:1:114;291:10:116;529:59:115;;;;-1:-1:-1;;;529:59:115;;12539:2:138;529:59:115;;;12521:21:138;12578:2;12558:18;;;12551:30;12617:26;12597:18;;;12590:54;12661:18;;529:59:115;;;;;;;;;595:7;:18;;-1:-1:-1;;;;;;595:18:115;-1:-1:-1;;;;;595:18:115;;;;;;;;;;623:26;;;619:79;;659:32;678:12;659:18;:32::i;:::-;-1:-1:-1;;1280:199:20;;;;;;;;1378:15;;;;;;-1:-1:-1;;;;;1280:199:20;;;;;;1421:15;1280:199;;;;;;;;1456:16;;1280:199;;;;;;;;1347:15;;1280:199;;;;;;;;1318:11;;;;;1280:199;;;;;;;;1264:13;:215;;-1:-1:-1;;;;;;1264:215:20;;;;-1:-1:-1;;;1264:215:20;;;;-1:-1:-1;;;;1264:215:20;-1:-1:-1;;;1264:215:20;;;;;;;;;;;;;-1:-1:-1;10977:22:49;;-1:-1:-1;;;;;10977:36:49::1;::::0;;:77:::1;;-1:-1:-1::0;11023:26:49::1;::::0;::::1;::::0;-1:-1:-1;;;;;11023:31:49::1;::::0;10977:77:::1;:122;;;-1:-1:-1::0;11064:30:49::1;::::0;::::1;::::0;-1:-1:-1;;;;;11064:35:49::1;::::0;10977:122:::1;:167;;;-1:-1:-1::0;11109:30:49::1;::::0;::::1;::::0;-1:-1:-1;;;;;11109:35:49::1;::::0;10977:167:::1;:212;;;-1:-1:-1::0;11154:21:49::1;::::0;::::1;::::0;-1:-1:-1;;;;;11154:35:49::1;::::0;10977:212:::1;10966:252;;;11203:15;;-1:-1:-1::0;;;11203:15:49::1;;;;;;;;;;;10966:252;11320:26;::::0;;::::1;::::0;11356:30:::1;::::0;;::::1;::::0;11259:158;;2084:32:41::1;11259:158:49::0;;::::1;13133:25:138::0;;;;-1:-1:-1;;;;;13231:15:138;;;13211:18;;;13204:43;;;;13283:15;13263:18;;;13256:43;11404:4:49::1;13315:18:138::0;;;13308:60;13105:19;;11259:158:49::1;::::0;;-1:-1:-1;;11259:158:49;;::::1;::::0;;;;;;11242:181;;11259:158:::1;11242:181:::0;;::::1;::::0;11225:198:::1;::::0;;;11443:22;;-1:-1:-1;;;;;11429:36:49;;::::1;;::::0;11489:26;;::::1;::::0;-1:-1:-1;;;;;11471:44:49;;::::1;;::::0;11543:30;;::::1;::::0;11521:52;::::1;;::::0;11601:30:::1;::::0;::::1;::::0;11579:52;;::::1;;::::0;;;11657:28;;::::1;::::0;-1:-1:-1;;;;;11637:48:49::1;;::::0;;;11706:23;;::::1;::::0;11691:38;::::1;;::::0;11748:21;::::1;::::0;11735:34:::1;;::::0;11776:32:::1;11794:13:::0;11776:17:::1;:32::i;:::-;11814:35;11833:15:::0;11814:18:::1;:35::i;:::-;11855:54;11882:26:::0;11855::::1;:54::i;:::-;11915:24;11924:14:::0;11915:8:::1;:24::i;:::-;11996:28;::::0;;12022:1:::1;11996:28:::0;;;::::1;::::0;::::1;::::0;;;11978:63:::1;::::0;11996:28:::1;::::0;::::1;1585:37111:::0;;;;;;;;;-1:-1:-1;1585:37111:49;;;;;;;11996:28:::1;;;;;;;;;;;;;;;-1:-1:-1::0;12026:14:49;11978:17:::1;:63::i;:::-;12052:16:::0;;:20;12048:125:::1;;12082:18;:25:::0;;-1:-1:-1;;;;12082:25:49::1;-1:-1:-1::0;;;12082:25:49::1;::::0;;12138:16:::1;::::0;;-1:-1:-1;12138:16:49;;;::::1;::::0;::::1;::::0;;;12115:51:::1;::::0;-1:-1:-1;12156:9:49;12115:22:::1;:51::i;:::-;10537:1640:::0;;;;;;;;1585:37111;;1482:188:115;1550:10;-1:-1:-1;;;;;1544:16:115;;;1536:52;;;;-1:-1:-1;;;1536:52:115;;13581:2:138;1536:52:115;;;13563:21:138;13620:2;13600:18;;;13593:30;13659:25;13639:18;;;13632:53;13702:18;;1536:52:115;13379:347:138;1536:52:115;1595:14;:19;;-1:-1:-1;;;;;;1595:19:115;-1:-1:-1;;;;;1595:19:115;;;;;;;;;-1:-1:-1;1653:7:115;;1626:39;;1595:19;;1653:7;;1626:39;;-1:-1:-1;1626:39:115;1482:188;:::o;19593:618:49:-;19749:27;;;;-1:-1:-1;;;;;19749:41:49;19745:69;;19799:15;;-1:-1:-1;;;19799:15:49;;;;;;;;;;;19745:69;19821:31;;:15;:31;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19821:31:49;;;-1:-1:-1;;;;;;19821:31:49;;;;;;;-1:-1:-1;;;19821:31:49;;;;;;;;;;-1:-1:-1;;;;19821:31:49;-1:-1:-1;;;19821:31:49;;;;;-1:-1:-1;;;;19821:31:49;;-1:-1:-1;;;19821:31:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19821:31:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19821:31:49;-1:-1:-1;;;;;;;;19821:31:49;;;;;;;19881:298;;;;;;;;19915:11;19881:298;;;;19821:31;19951:15;19881:298;;;;;;;;;19995:19;;19881:298;;;;;;20043:19;;19881:298;;;;;;;;20089:17;;-1:-1:-1;;;;;19881:298:49;;;;;;;;20128:12;;19881:298;;;;;;20160:10;;19881:298;;;;;;;;;;19864:342;;;;;19821:31;;19864:342;:::i;:::-;;;;;;;;19593:618;:::o;28411:657::-;28507:9;28502:519;28526:18;:25;28522:1;:29;28502:519;;;28566:35;28604:18;28623:1;28604:21;;;;;;;;:::i;:::-;;;;;;;;;;;;28670:344;;;;;;;;;28710:23;;;;28670:344;;;;;;28767:32;;;;28670:344;;;;;;;;28833:32;;;;;28670:344;;;;;;;;28890:23;;;;;-1:-1:-1;;;;;28670:344:49;;;;;;;;;28942:27;;;;;28670:344;;;;;;;;28988:17;;;;28670:344;;;;;;;;28651:15;;-1:-1:-1;;;;;28634:33:49;-1:-1:-1;28634:33:49;;;:16;:33;;;;;;;:380;;;;;;;;;;;;;;;;-1:-1:-1;;;28634:380:49;-1:-1:-1;;;;28634:380:49;;;-1:-1:-1;;;28634:380:49;;;;;-1:-1:-1;;;;;;;;28634:380:49;;;;;;-1:-1:-1;;;;;;;;28634:380:49;;;;;;;;;-1:-1:-1;;;;;;;;28634:380:49;;;;;-1:-1:-1;;;;;;28634:380:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28553:3:49;;;:::i;:::-;;;28502:519;;;;29031:32;29044:18;29031:32;;;;;;:::i;29684:506::-;29804:9;29799:323;29823:26;:33;29819:1;:37;29799:323;;;29871:43;29917:26;29944:1;29917:29;;;;;;;;:::i;:::-;;;;;;;;;;;;29999:116;;;;;;;;30039:15;;;;29999:116;;;;;;30081:25;;;;29999:116;;;;;;;;;;29980:15;;-1:-1:-1;;;;;29955:41:49;-1:-1:-1;29955:41:49;;;:24;:41;;;;;;;:160;;;;;;;;;;;-1:-1:-1;;29955:160:49;;;;;;;;;;;-1:-1:-1;29858:3:49;;;:::i;:::-;;;29799:323;;;;30132:53;30158:26;30132:53;;;;;;:::i;31712:1526::-;31806:21;;8892:2;31837:33;;31833:59;;;31879:13;;-1:-1:-1;;;31879:13:49;;;;;;;;;;;31833:59;32085:17;;;;;;;:21;;;;:60;;-1:-1:-1;32128:17:49;;;;;;;-1:-1:-1;;;;;32110:14:49;;;:35;;32085:60;32081:90;;;32155:9;:7;:9::i;:::-;32256;32268:15;:6;:13;:15::i;:::-;32256:27;;32251:121;32285:5;;32251:121;;32306:11;32323:16;32333:5;32337:1;32333;:5;:::i;:::-;32323:6;;:9;:16::i;:::-;-1:-1:-1;32305:34:49;-1:-1:-1;32347:18:49;:6;32305:34;32347:13;:18::i;:::-;;32297:75;32292:3;;;;:::i;:::-;;;32251:121;;;;32393:22;32624:9;32619:523;32643:12;32639:1;:16;32619:523;;;32906:11;32920:14;32935:1;32920:17;;;;;;;;:::i;:::-;;;;;;;:21;;;32906:35;;32949:13;32965:14;32980:1;32965:17;;;;;;;;:::i;:::-;;;;;;;:24;;;32949:40;;33008:11;;-1:-1:-1;;;;;33001:18:49;:3;-1:-1:-1;;;;;33001:18:49;;:39;;;-1:-1:-1;;;;;;33023:17:49;;;33001:39;32997:74;;;33049:22;;-1:-1:-1;;;33049:22:49;;-1:-1:-1;;;;;18809:32:138;;33049:22:49;;;18791:51:138;18764:18;;33049:22:49;18645:203:138;32997:74:49;33079:23;:6;33090:3;33079:23;;;:10;:23::i;:::-;-1:-1:-1;33110:25:49;;;;;;:::i;:::-;;;32662:480;;32657:3;;;;:::i;:::-;;;32619:523;;;-1:-1:-1;33147:17:49;:35;;-1:-1:-1;;;;33147:35:49;;;;;;;;;33193:40;;;;;;33147:35;;33218:14;;33193:40;:::i;:::-;;;;;;;;31777:1461;;31712:1526;:::o;21332:947::-;21452:9;21447:387;21471:7;:14;21467:1;:18;21447:387;;;21500:13;21516:7;21524:1;21516:10;;;;;;;;:::i;:::-;;;;;;;:16;;;21500:32;;21540:12;21555:7;21563:1;21555:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:15;;;-1:-1:-1;21584:36:49;:20;21614:5;21584:29;:36::i;:::-;21579:73;;21629:23;;-1:-1:-1;;;21629:23:49;;-1:-1:-1;;;;;18809:32:138;;21629:23:49;;;18791:51:138;18764:18;;21629:23:49;18645:203:138;21579:73:49;-1:-1:-1;;;;;21664:39:49;;:31;:20;21689:5;21664:24;:31::i;:::-;-1:-1:-1;;;;;21664:39:49;;21660:71;;21712:19;;-1:-1:-1;;;21712:19:49;;;;;;;;;;;21660:71;21744:34;:20;21772:5;21744:27;:34::i;:::-;21740:88;;;21795:24;;;-1:-1:-1;;;;;20191:15:138;;;20173:34;;20243:15;;20238:2;20223:18;;20216:43;21795:24:49;;20108:18:138;21795:24:49;;;;;;;21740:88;21492:342;;21487:3;;;;:::i;:::-;;;21447:387;;;;21845:9;21840:435;21864:4;:11;21860:1;:15;21840:435;;;21890:13;21906:4;21911:1;21906:7;;;;;;;;:::i;:::-;;;;;;;:13;;;21890:29;;21927:12;21942:4;21947:1;21942:7;;;;;;;;:::i;:::-;;;;;;;:12;;;21927:27;;21984:1;-1:-1:-1;;;;;21967:19:49;:5;-1:-1:-1;;;;;21967:19:49;;:41;;;-1:-1:-1;;;;;;21990:18:49;;;21967:41;21963:78;;;22017:24;;-1:-1:-1;;;22017:24:49;;;;;;;;;;;21963:78;22076:4;-1:-1:-1;;;;;22070:20:49;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22053:40:49;:5;-1:-1:-1;;;;;22053:40:49;;22049:72;;22102:19;;-1:-1:-1;;;22102:19:49;;;;;;;;;;;22049:72;22134:37;:20;22159:5;22166:4;22134:24;:37::i;:::-;22130:139;;;22188:22;;;-1:-1:-1;;;;;20191:15:138;;;20173:34;;20243:15;;20238:2;20223:18;;20216:43;22188:22:49;;20108:18:138;22188:22:49;;;;;;;22130:139;;;22242:18;;-1:-1:-1;;;22242:18:49;;;;;;;;;;;22130:139;21882:393;;21877:3;;;;:::i;:::-;;;21840:435;;;;21332:947;;:::o;37314:501::-;37415:9;37410:179;37434:7;:14;37430:1;:18;37410:179;;;37463:16;37482:7;37490:1;37482:10;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;37504:28:49;:11;37482:10;37504:18;:28::i;:::-;37500:83;;;37549:25;;-1:-1:-1;;;;;18809:32:138;;18791:51;;37549:25:49;;18779:2:138;18764:18;37549:25:49;;;;;;;37500:83;-1:-1:-1;37450:3:49;;;:::i;:::-;;;37410:179;;;;37599:9;37594:217;37618:4;:11;37614:1;:15;37594:217;;;37644:13;37660:4;37665:1;37660:7;;;;;;;;:::i;:::-;;;;;;;37644:23;;37696:1;-1:-1:-1;;;;;37679:19:49;:5;-1:-1:-1;;;;;37679:19:49;;37675:52;;37710:8;;;37675:52;37738:22;:11;37754:5;37738:15;:22::i;:::-;37734:71;;;37777:19;;-1:-1:-1;;;;;18809:32:138;;18791:51;;37777:19:49;;18779:2:138;18764:18;37777:19:49;;;;;;;37734:71;37636:175;37594:217;37631:3;;;:::i;:::-;;;37594:217;;33556:914;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38147:10:49;:21;;;;:46;;-1:-1:-1;38186:7:49;;-1:-1:-1;;;;;38186:7:49;38172:10;:21;;38147:46;:78;;;;-1:-1:-1;38198:27:49;:6;38214:10;38198:15;:27::i;:::-;38197:28;38147:78;38143:130;;;38240:33;;-1:-1:-1;;;38240:33:49;;;;;;;;;;;38143:130;33633:17:::1;::::0;;;::::1;;;33610:20;33660:17:::0;;;33656:43:::1;;33686:13;;-1:-1:-1::0;;;33686:13:49::1;;;;;;;;;;;33656:43;33730:14;::::0;-1:-1:-1;;;;;33730:14:49::1;33754:29:::0;;::::1;33750:55;;;33792:13;;-1:-1:-1::0;;;33792:13:49::1;;;;;;;;;;;33750:55;33841:1;33815:23;:21;:23::i;:::-;:27;33811:61;;;33851:21;;-1:-1:-1::0;;;33851:21:49::1;;;;;;;;;;;33811:61;33898:14:::0;33879:16:::1;33941:15;:6;:13;:15::i;:::-;33918:38;;33967:9;33962:373;33986:12;33982:1;:16;33962:373;;;34014:11;::::0;34045:12:::1;:6;34055:1:::0;34045:9:::1;:12::i;:::-;34013:44:::0;;-1:-1:-1;34013:44:49;-1:-1:-1;34151:13:49::1;34202:12:::0;34175:23:::1;34013:44:::0;-1:-1:-1;;;;;34175:23:49;::::1;;:::i;:::-;34174:40;;;;:::i;:::-;34151:64:::0;-1:-1:-1;34223:19:49::1;34151:64:::0;34223:19;::::1;:::i;:::-;34257:11;::::0;34223:19;;-1:-1:-1;34250:45:49::1;::::0;-1:-1:-1;;;;;34250:32:49::1;34283:3:::0;-1:-1:-1;;;;;34250:45:49;::::1;:32;:45::i;:::-;34308:20;::::0;-1:-1:-1;;;;;21289:31:138;;21271:50;;-1:-1:-1;;;;;34308:20:49;::::1;::::0;::::1;::::0;21259:2:138;21244:18;34308:20:49::1;;;;;;;34005:330;;;34000:3;;;;:::i;:::-;;;33962:373;;;-1:-1:-1::0;;34439:14:49::1;:26:::0;;-1:-1:-1;;;;;;34439:26:49::1;-1:-1:-1::0;;;;;34439:26:49;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;33556:914:49:o;11864:114:136:-;11933:7;11955:18;11962:3;11955:6;:18::i;:::-;11948:25;11864:114;-1:-1:-1;;11864:114:136:o;12295:222::-;12375:7;;;;12430:21;12433:3;12445:5;12430:2;:21::i;:::-;12399:52;;;;-1:-1:-1;12295:222:136;-1:-1:-1;;;;;12295:222:136:o;11407:151::-;11484:4;11503:50;11510:3;-1:-1:-1;;;;;11530:21:136;;11503:6;:50::i;:::-;11496:57;11407:151;-1:-1:-1;;;11407:151:136:o;11068:192::-;11173:4;11192:63;11196:3;-1:-1:-1;;;;;11216:21:136;;11248:5;11192:3;:63::i;:::-;11185:70;11068:192;-1:-1:-1;;;;11068:192:136:o;934:153:117:-;1021:4;1040:42;:3;-1:-1:-1;;;;;1060:21:117;;1040:19;:42::i;1953:146::-;2035:7;2057:37;:3;-1:-1:-1;;;;;2072:21:117;;2057:14;:37::i;694:144::-;774:4;793:40;:3;-1:-1:-1;;;;;811:21:117;;793:17;:40::i;438:160::-;530:4;549:44;:3;-1:-1:-1;;;;;564:21:117;;587:5;549:14;:44::i;8071:150:137:-;8144:4;8163:53;8171:3;-1:-1:-1;;;;;8191:23:137;;8163:7;:53::i;7773:144::-;7843:4;7862:50;7867:3;-1:-1:-1;;;;;7887:23:137;;7862:4;:50::i;11629:160:136:-;11713:4;11732:52;11741:3;-1:-1:-1;;;;;11761:21:136;;11732:8;:52::i;35408:227:49:-;35614:14;;35558:11;;35551:44;;-1:-1:-1;;;35551:44:49;;35589:4;35551:44;;;18791:51:138;35463:6:49;;-1:-1:-1;;;;;35614:14:49;;-1:-1:-1;;;;;35551:29:49;;;;18764:18:138;;35551:44:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35544:86;;;;:::i;:::-;35537:93;;35408:227;:::o;759:169:131:-;864:58;;;-1:-1:-1;;;;;21918:32:138;;864:58:131;;;21900:51:138;21967:18;;;;21960:34;;;864:58:131;;;;;;;;;;21873:18:138;;;;864:58:131;;;;;;;;-1:-1:-1;;;;;864:58:131;;;-1:-1:-1;;;864:58:131;;;;837:86;;857:5;;837:19;:86;:::i;3262:117:136:-;3334:7;3356:18;:3;:16;:18::i;3710:181::-;3793:7;;;3831:19;:3;3844:5;3831:12;:19::i;:::-;3869:16;;;;:11;;;;;:16;;;;;;;;;3710:181;-1:-1:-1;;;;3710:181:136:o;2821:154::-;2901:4;2920:16;;;:11;;;:16;;;;;2913:23;;;2949:21;2920:3;2932;2949:16;:21::i;2485:180::-;2593:4;2605:16;;;:11;;;:16;;;;;:24;;;2642:18;2605:3;2617;2642:13;:18::i;8757:142::-;8841:4;8860:34;8869:3;8889;8860:8;:34::i;10121:162::-;10200:7;10246:29;10250:3;10270;10246;:29::i;8553:133::-;8630:4;8649:32;8656:3;8676;8649:6;:32::i;8214:192::-;8319:4;8338:63;8342:3;8362;-1:-1:-1;;;;;8376:23:136;;8338:3;:63::i;2660:1242:137:-;2726:4;2855:19;;;:12;;;:19;;;;;;2885:15;;2881:1017;;3224:21;3248:14;3261:1;3248:10;:14;:::i;:::-;3290:18;;3224:38;;-1:-1:-1;3270:17:137;;3290:22;;3311:1;;3290:22;:::i;:::-;3270:42;;3338:13;3325:9;:26;3321:352;;3363:17;3383:3;:11;;3395:9;3383:22;;;;;;;;:::i;:::-;;;;;;;;;3363:42;;3518:9;3489:3;:11;;3501:13;3489:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3585:23;;;:12;;;:23;;;;;:36;;;3321:352;3739:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3819:3;:12;;:19;3832:5;3819:19;;;;;;;;;;;3812:26;;;3854:4;3847:11;;;;;;;2881:1017;3886:5;3879:12;;;;;2881:1017;2732:1170;2660:1242;;;;:::o;2152:354::-;2215:4;4067:19;;;:12;;;:19;;;;;;2227:275;;-1:-1:-1;2263:23:137;;;;;;;;:11;:23;;;;;;;;;;;;;2425:18;;2403:19;;;:12;;;:19;;;;;;:40;;;;2451:11;;2227:275;-1:-1:-1;2490:5:137;2483:12;;3046:134:136;3133:4;3152:23;:3;3171;3152:18;:23::i;3401:668:131:-;3830:69;;;;;;;;;;;;;;;;;;3804:23;;3830:69;;-1:-1:-1;;;;;3830:27:131;;;3858:4;;3830:27;:69::i;:::-;3909:17;;3804:95;;-1:-1:-1;3909:21:131;3905:160;;3992:10;3981:30;;;;;;;;;;;;:::i;:::-;3973:85;;;;-1:-1:-1;;;3973:85:131;;22546:2:138;3973:85:131;;;22528:21:138;22585:2;22565:18;;;22558:30;22624:34;22604:18;;;22597:62;-1:-1:-1;;;22675:18:138;;;22668:40;22725:19;;3973:85:131;22344:406:138;6215:109:137;6278:7;6300:19;6308:3;4247:18;;4169:101;6644:123;6718:7;6740:22;6744:3;6756:5;6740:3;:22::i;5814:123::-;5887:4;5906:26;5914:3;5926:5;5906:7;:26::i;5543:117::-;5613:4;5632:23;5637:3;5649:5;5632:4;:23::i;4425:233:136:-;4507:7;4538:16;;;:11;;;:16;;;;;;4568:10;;;;:32;;-1:-1:-1;4582:18:136;4591:3;4596;4582:8;:18::i;:::-;4560:75;;;;-1:-1:-1;;;4560:75:136;;22957:2:138;4560:75:136;;;22939:21:138;22996:2;22976:18;;;22969:30;23035:32;23015:18;;;23008:60;23085:18;;4560:75:136;22755:354:138;6010:132:137;6090:4;4067:19;;;:12;;;:19;;;;;;:24;;6109:28;3975:121;3695:187:132;3798:12;3825:52;3847:6;3855:4;3861:1;3864:12;3825:21;:52::i;4590:112:137:-;4657:7;4679:3;:11;;4691:5;4679:18;;;;;;;;:::i;:::-;;;;;;;;;4672:25;;4590:112;;;;:::o;4672:414:132:-;4819:12;4872:5;4847:21;:30;;4839:81;;;;-1:-1:-1;;;4839:81:132;;23316:2:138;4839:81:132;;;23298:21:138;23355:2;23335:18;;;23328:30;23394:34;23374:18;;;23367:62;-1:-1:-1;;;23445:18:138;;;23438:36;23491:19;;4839:81:132;23114:402:138;4839:81:132;4927:12;4941:23;4968:6;-1:-1:-1;;;;;4968:11:132;4987:5;4994:4;4968:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4926:73:132;;-1:-1:-1;4926:73:132;-1:-1:-1;5012:69:132;5039:6;4926:73;;5068:12;5012:26;:69::i;:::-;5005:76;4672:414;-1:-1:-1;;;;;;;4672:414:132:o;7016:548::-;7178:12;7202:7;7198:362;;;7223:10;:17;7244:1;7223:22;7219:256;;-1:-1:-1;;;;;1395:19:132;;;7406:60;;;;-1:-1:-1;;;7406:60:132;;24270:2:138;7406:60:132;;;24252:21:138;24309:2;24289:18;;;24282:30;24348:31;24328:18;;;24321:59;24397:18;;7406:60:132;24068:353:138;7406:60:132;-1:-1:-1;7489:10:132;7482:17;;7198:362;7520:33;7528:10;7540:12;8181:17;;:21;8177:325;;8383:10;8377:17;8431:15;8418:10;8414:2;8410:19;8403:44;8177:325;8482:12;8475:20;;-1:-1:-1;;;8475:20:132;;;;;;;;:::i;14:127:138:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:138;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:257::-;476:4;470:11;;;508:17;;-1:-1:-1;;;;;540:34:138;;576:22;;;537:62;534:88;;;602:18;;:::i;666:253::-;738:2;732:9;780:4;768:17;;-1:-1:-1;;;;;800:34:138;;836:22;;;797:62;794:88;;;862:18;;:::i;924:275::-;995:2;989:9;1060:2;1041:13;;-1:-1:-1;;1037:27:138;1025:40;;-1:-1:-1;;;;;1080:34:138;;1116:22;;;1077:62;1074:88;;;1142:18;;:::i;:::-;1178:2;1171:22;924:275;;-1:-1:-1;924:275:138:o;1204:131::-;-1:-1:-1;;;;;1279:31:138;;1269:42;;1259:70;;1325:1;1322;1315:12;1259:70;1204:131;:::o;1340:138::-;1419:13;;1441:31;1419:13;1441:31;:::i;:::-;1340:138;;;:::o;1483:175::-;1561:13;;-1:-1:-1;;;;;1603:30:138;;1593:41;;1583:69;;1648:1;1645;1638:12;1663:883;1733:5;1781:4;1769:9;1764:3;1760:19;1756:30;1753:50;;;1799:1;1796;1789:12;1753:50;1821:22;;:::i;:::-;1812:31;;1873:9;1867:16;1892:33;1917:7;1892:33;:::i;:::-;1934:22;;1988:48;2032:2;2017:18;;1988:48;:::i;:::-;1983:2;1976:5;1972:14;1965:72;2069:48;2113:2;2102:9;2098:18;2069:48;:::i;:::-;2064:2;2057:5;2053:14;2046:72;2150:48;2194:2;2183:9;2179:18;2150:48;:::i;:::-;2145:2;2134:14;;2127:72;2244:3;2229:19;;2223:26;-1:-1:-1;;;;;2280:32:138;;2268:45;;2258:73;;2327:1;2324;2317:12;2258:73;2358:3;2347:15;;2340:32;2405:50;2450:3;2435:19;;2405:50;:::i;:::-;2399:3;2392:5;2388:15;2381:75;2489:50;2534:3;2523:9;2519:19;2489:50;:::i;:::-;2483:3;2476:5;2472:15;2465:75;1663:883;;;;:::o;2551:163::-;2629:13;;2682:6;2671:18;;2661:29;;2651:57;;2704:1;2701;2694:12;2719:167;2797:13;;2850:10;2839:22;;2829:33;;2819:61;;2876:1;2873;2866:12;2891:842;2962:5;3010:4;2998:9;2993:3;2989:19;2985:30;2982:50;;;3028:1;3025;3018:12;2982:50;3050:22;;:::i;:::-;3041:31;;3102:9;3096:16;3121:33;3146:7;3121:33;:::i;:::-;3163:22;;3217:48;3261:2;3246:18;;3217:48;:::i;:::-;3212:2;3205:5;3201:14;3194:72;3298:48;3342:2;3331:9;3327:18;3298:48;:::i;:::-;3293:2;3286:5;3282:14;3275:72;3379:48;3423:2;3412:9;3408:18;3379:48;:::i;:::-;3374:2;3367:5;3363:14;3356:72;3473:3;3462:9;3458:19;3452:26;3487:33;3512:7;3487:33;:::i;:::-;3547:3;3536:15;;3529:32;3594:49;3638:3;3623:19;;3594:49;:::i;:::-;3588:3;3581:5;3577:15;3570:74;3677:49;3721:3;3710:9;3706:19;3677:49;:::i;3738:193::-;3808:4;-1:-1:-1;;;;;3830:30:138;;3827:56;;;3863:18;;:::i;:::-;-1:-1:-1;3908:1:138;3904:14;3920:4;3900:25;;3738:193::o;3936:1107::-;4011:5;4064:3;4057:4;4049:6;4045:17;4041:27;4031:55;;4082:1;4079;4072:12;4031:55;4111:6;4105:13;4137:4;4161:70;4177:53;4227:2;4177:53;:::i;:::-;4161:70;:::i;:::-;4265:15;;;4351:1;4347:10;;;;4335:23;;4331:32;;;4296:12;;;;4375:15;;;4372:35;;;4403:1;4400;4393:12;4372:35;4439:2;4431:6;4427:15;4451:563;4467:6;4462:3;4459:15;4451:563;;;4545:4;4539:3;4534;4530:13;4526:24;4523:114;;;4591:1;4620:2;4616;4609:14;4523:114;4663:22;;:::i;:::-;4719:3;4713:10;4736:33;4761:7;4736:33;:::i;:::-;4782:22;;4838:12;;;4832:19;4864:33;4832:19;4864:33;:::i;:::-;4917:14;;;4910:31;4954:18;;4992:12;;;;4493:4;4484:14;4451:563;;;-1:-1:-1;5032:5:138;3936:1107;-1:-1:-1;;;;;;3936:1107:138:o;5048:744::-;5113:5;5166:3;5159:4;5151:6;5147:17;5143:27;5133:55;;5184:1;5181;5174:12;5133:55;5213:6;5207:13;5239:4;5263:70;5279:53;5329:2;5279:53;:::i;5263:70::-;5367:15;;;5453:1;5449:10;;;;5437:23;;5433:32;;;5398:12;;;;5477:15;;;5474:35;;;5505:1;5502;5495:12;5474:35;5541:2;5533:6;5529:15;5553:210;5569:6;5564:3;5561:15;5553:210;;;5642:3;5636:10;5659:31;5684:5;5659:31;:::i;:::-;5703:18;;5741:12;;;;5586;;5553:210;;5797:164;5873:13;;5922;;5915:21;5905:32;;5895:60;;5951:1;5948;5941:12;5966:177;6045:13;;-1:-1:-1;;;;;6087:31:138;;6077:42;;6067:70;;6133:1;6130;6123:12;6148:405;6212:5;6260:4;6248:9;6243:3;6239:19;6235:30;6232:50;;;6278:1;6275;6268:12;6232:50;6300:22;;:::i;:::-;6291:31;;6345:37;6372:9;6345:37;:::i;:::-;6338:5;6331:52;6415:49;6460:2;6449:9;6445:18;6415:49;:::i;:::-;6410:2;6403:5;6399:14;6392:73;6497:49;6542:2;6531:9;6527:18;6497:49;:::i;:::-;6492:2;6485:5;6481:14;6474:73;6148:405;;;;:::o;6558:1598::-;6641:5;6694:3;6687:4;6679:6;6675:17;6671:27;6661:55;;6712:1;6709;6702:12;6661:55;6741:6;6735:13;6767:4;6791:70;6807:53;6857:2;6807:53;:::i;6791:70::-;6895:15;;;6957:4;7000:11;;;6988:24;;6984:33;;;6926:12;;;;6883:3;7029:15;;;7026:35;;;7057:1;7054;7047:12;7026:35;7093:2;7085:6;7081:15;7105:1022;7121:6;7116:3;7113:15;7105:1022;;;7197:2;7191:3;7186;7182:13;7178:22;7175:112;;;7241:1;7270:2;7266;7259:14;7175:112;7313:22;;:::i;:::-;7369:3;7363:10;7386:33;7411:7;7386:33;:::i;:::-;7432:22;;7490:42;7519:12;;;7490:42;:::i;:::-;7485:2;7478:5;7474:14;7467:66;7556:2;7594:42;7632:2;7627:3;7623:12;7594:42;:::i;:::-;7578:14;;;7571:66;7660:2;7698:42;7727:12;;;7698:42;:::i;:::-;7682:14;;;7675:66;7764:3;7803:42;7832:12;;;7803:42;:::i;:::-;7787:14;;;7780:66;7869:3;7908:42;7937:12;;;7908:42;:::i;:::-;7892:14;;;7885:66;7974:3;8013:40;8040:12;;;8013:40;:::i;:::-;7997:14;;;7990:64;8067:18;;8105:12;;;;7138;;7105:1022;;;-1:-1:-1;8145:5:138;;6558:1598;-1:-1:-1;;;;;;;6558:1598:138:o;8161:1189::-;8252:5;8305:3;8298:4;8290:6;8286:17;8282:27;8272:55;;8323:1;8320;8313:12;8272:55;8352:6;8346:13;8378:4;8402:70;8418:53;8468:2;8418:53;:::i;8402:70::-;8506:15;;;8568:4;8611:11;;;8599:24;;8595:33;;;8537:12;;;;8494:3;8640:15;;;8637:35;;;8668:1;8665;8658:12;8637:35;8704:2;8696:6;8692:15;8716:605;8732:6;8727:3;8724:15;8716:605;;;8808:2;8802:3;8797;8793:13;8789:22;8786:112;;;8852:1;8881:2;8877;8870:14;8786:112;8924:22;;:::i;:::-;8980:3;8974:10;8997:33;9022:7;8997:33;:::i;:::-;9043:22;;9101:42;9130:12;;;9101:42;:::i;:::-;9096:2;9089:5;9085:14;9078:66;9167:2;9205:42;9243:2;9238:3;9234:12;9205:42;:::i;:::-;9189:14;;;9182:66;9261:18;;9299:12;;;;8749;;8716:605;;9355:1051;9432:5;9485:3;9478:4;9470:6;9466:17;9462:27;9452:55;;9503:1;9500;9493:12;9452:55;9532:6;9526:13;9558:4;9582:70;9598:53;9648:2;9598:53;:::i;9582:70::-;9686:15;;;9772:1;9768:10;;;;9756:23;;9752:32;;;9717:12;;;;9796:15;;;9793:35;;;9824:1;9821;9814:12;9793:35;9860:2;9852:6;9848:15;9872:505;9888:6;9883:3;9880:15;9872:505;;;9966:4;9960:3;9955;9951:13;9947:24;9944:114;;;10012:1;10041:2;10037;10030:14;9944:114;10084:22;;:::i;:::-;10140:3;10134:10;10157:33;10182:7;10157:33;:::i;:::-;10203:22;;10261:42;10290:12;;;10261:42;:::i;:::-;10245:14;;;10238:66;10317:18;;10355:12;;;;9914:4;9905:14;9872:505;;10411:1921;10899:6;10907;10915;10923;10931;10939;10947;10955;11008:3;10996:9;10987:7;10983:23;10979:33;10976:53;;;11025:1;11022;11015:12;10976:53;11048:61;11101:7;11090:9;11048:61;:::i;:::-;11038:71;;11128:72;11192:7;11186:3;11175:9;11171:19;11128:72;:::i;:::-;11244:3;11229:19;;11223:26;11118:82;;-1:-1:-1;;;;;;11298:14:138;;;11295:34;;;11325:1;11322;11315:12;11295:34;11348:82;11422:7;11413:6;11402:9;11398:22;11348:82;:::i;:::-;11338:92;;11476:3;11465:9;11461:19;11455:26;11439:42;;11506:2;11496:8;11493:16;11490:36;;;11522:1;11519;11512:12;11490:36;11545:74;11611:7;11600:8;11589:9;11585:24;11545:74;:::i;:::-;11535:84;;11638:65;11695:7;11689:3;11678:9;11674:19;11638:65;:::i;:::-;11628:75;;11749:3;11738:9;11734:19;11728:26;11712:42;;11779:2;11769:8;11766:16;11763:36;;;11795:1;11792;11785:12;11763:36;11818:92;11902:7;11891:8;11880:9;11876:24;11818:92;:::i;:::-;11808:102;;11956:3;11945:9;11941:19;11935:26;11919:42;;11986:2;11976:8;11973:16;11970:36;;;12002:1;11999;11992:12;11970:36;12025:100;12117:7;12106:8;12095:9;12091:24;12025:100;:::i;:::-;12015:110;;12171:3;12160:9;12156:19;12150:26;12134:42;;12201:2;12191:8;12188:16;12185:36;;;12217:1;12214;12207:12;12185:36;;12240:86;12318:7;12307:8;12296:9;12292:24;12240:86;:::i;:::-;12230:96;;;10411:1921;;;;;;;;;;;:::o;14427:1029::-;14788:13;;-1:-1:-1;;;;;14784:22:138;;;14766:41;;14854:4;14842:17;;;14836:24;-1:-1:-1;;;;;14935:21:138;;;14913:20;;;14906:51;14887:2;15005:17;;;14999:24;14995:33;;14973:20;;;14966:63;15089:4;15077:17;;;15071:24;15067:33;;15045:20;;;15038:63;15161:4;15149:17;;;15143:24;-1:-1:-1;;;;;15139:49:138;15117:20;;;15110:79;14746:3;15237:17;;;15231:24;15227:33;;15205:20;;;15198:63;15310:4;15298:17;;;15292:24;12863:31;;15360:20;;;12851:44;13852:12;;13848:21;;15445:3;15430:19;;13836:34;13905:16;;;13899:23;13941:6;13979:21;;;13963:14;;;13956:45;14038:16;;;14032:23;14074:10;14116:23;;;14100:14;;;14093:47;14182:16;;;14176:23;14172:32;;;14156:14;;;14149:56;14247:16;;14241:23;14237:32;;;14221:14;;;14214:56;14312:16;;14306:23;14302:32;;;14286:14;;;14279:56;14377:16;;14371:23;14367:48;14351:14;;;14344:72;14715:3;14700:19;;15390:60;13731:691;15461:127;15522:10;15517:3;15513:20;15510:1;15503:31;15553:4;15550:1;15543:15;15577:4;15574:1;15567:15;15593:127;15654:10;15649:3;15645:20;15642:1;15635:31;15685:4;15682:1;15675:15;15709:4;15706:1;15699:15;15725:135;15764:3;15785:17;;;15782:43;;15805:18;;:::i;:::-;-1:-1:-1;15852:1:138;15841:13;;15725:135::o;15961:1461::-;16206:2;16258:21;;;16328:13;;16231:18;;;16350:22;;;16177:4;;16206:2;16391;;16409:18;;;;16450:15;;;16177:4;16493:903;16507:6;16504:1;16501:13;16493:903;;;16566:13;;16608:9;;-1:-1:-1;;;;;16604:35:138;16592:48;;16679:11;;;16673:18;16714:10;16758:21;;;16744:12;;;16737:43;16824:11;;;16818:18;16814:27;;16800:12;;;16793:49;16865:4;16913:11;;;16907:18;16903:27;;;16889:12;;;16882:49;16954:4;17002:11;;;16996:18;-1:-1:-1;;;;;16992:43:138;16978:12;;;16971:65;16627:3;17104:11;;;17098:18;17129:47;17163:12;;;17098:18;-1:-1:-1;;;;;12755:30:138;12743:43;;12690:102;17129:47;-1:-1:-1;;17199:4:138;17244:11;;;17238:18;15935:13;15928:21;17301:12;;;15916:34;17343:4;17334:14;;;;17371:15;;;;16529:1;16522:9;16493:903;;;-1:-1:-1;17413:3:138;;15961:1461;-1:-1:-1;;;;;;;15961:1461:138:o;17427:939::-;17688:2;17740:21;;;17810:13;;17713:18;;;17832:22;;;17659:4;;17688:2;17873;;17891:18;;;;17932:15;;;17659:4;17975:365;17989:6;17986:1;17983:13;17975:365;;;18048:13;;18090:9;;-1:-1:-1;;;;;18086:35:138;18074:48;;18166:11;;;18160:18;18180:6;18156:31;18142:12;;;18135:53;18232:11;;18226:18;18246:10;18222:35;18208:12;;;18201:57;18287:4;18278:14;;;;18315:15;;;;18118:1;18004:9;17975:365;;18371:128;18438:9;;;18459:11;;;18456:37;;;18473:18;;:::i;18504:136::-;18543:3;18571:5;18561:39;;18580:18;;:::i;:::-;-1:-1:-1;;;18616:18:138;;18504:136::o;18853:172::-;18920:10;18950;;;18962;;;18946:27;;18985:11;;;18982:37;;;18999:18;;:::i;19030:926::-;19261:4;19290:2;19330;19319:9;19315:18;19372:10;19364:6;19360:23;19349:9;19342:42;19403:2;19441;19436;19425:9;19421:18;19414:30;19464:6;19499;19493:13;19530:6;19522;19515:22;19568:2;19557:9;19553:18;19546:25;;19606:2;19598:6;19594:15;19580:29;;19627:1;19637:293;19651:6;19648:1;19645:13;19637:293;;;19710:13;;19752:9;;-1:-1:-1;;;;;19748:35:138;19736:48;;19828:11;;19822:18;19842:6;19818:31;19804:12;;;19797:53;19905:15;;;;19870:12;;;;19780:1;19666:9;19637:293;;;-1:-1:-1;19947:3:138;;19030:926;-1:-1:-1;;;;;;;;19030:926:138:o;20270:268::-;20357:6;20410:2;20398:9;20389:7;20385:23;20381:32;20378:52;;;20426:1;20423;20416:12;20378:52;20458:9;20452:16;20477:31;20502:5;20477:31;:::i;20543:168::-;20616:9;;;20647;;20664:15;;;20658:22;;20644:37;20634:71;;20685:18;;:::i;20716:217::-;20756:1;20782;20772:132;;20826:10;20821:3;20817:20;20814:1;20807:31;20861:4;20858:1;20851:15;20889:4;20886:1;20879:15;20772:132;-1:-1:-1;20918:9:138;;20716:217::o;20938:183::-;-1:-1:-1;;;;;21057:10:138;;;21045;;;21041:27;;21080:12;;;21077:38;;;21095:18;;:::i;21332:184::-;21402:6;21455:2;21443:9;21434:7;21430:23;21426:32;21423:52;;;21471:1;21468;21461:12;21423:52;-1:-1:-1;21494:16:138;;21332:184;-1:-1:-1;21332:184:138:o;21521:200::-;21587:9;;;21560:4;21615:9;;21643:10;;21655:12;;;21639:29;21678:12;;;21670:21;;21636:56;21633:82;;;21695:18;;:::i;22005:127::-;22066:10;22061:3;22057:20;22054:1;22047:31;22097:4;22094:1;22087:15;22121:4;22118:1;22111:15;22137:202;22204:6;22257:2;22245:9;22236:7;22232:23;22228:32;22225:52;;;22273:1;22270;22263:12;22225:52;22296:37;22323:9;22296:37;:::i;23521:250::-;23606:1;23616:113;23630:6;23627:1;23624:13;23616:113;;;23706:11;;;23700:18;23687:11;;;23680:39;23652:2;23645:10;23616:113;;;-1:-1:-1;;23763:1:138;23745:16;;23738:27;23521:250::o;23776:287::-;23905:3;23943:6;23937:13;23959:66;24018:6;24013:3;24006:4;23998:6;23994:17;23959:66;:::i;:::-;24041:16;;;;;23776:287;-1:-1:-1;;23776:287:138:o;24426:396::-;24575:2;24564:9;24557:21;24538:4;24607:6;24601:13;24650:6;24645:2;24634:9;24630:18;24623:34;24666:79;24738:6;24733:2;24722:9;24718:18;24713:2;24705:6;24701:15;24666:79;:::i;:::-;24806:2;24785:15;-1:-1:-1;;24781:29:138;24766:45;;;;24813:2;24762:54;;24426:396;-1:-1:-1;;24426:396:138:o;:::-;1585:37111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806376f6ae761161010f578063c92b2832116100a2578063e76c0b0611610071578063e76c0b0614610943578063efeadb6d14610956578063eff7cc4814610969578063f2fde38b1461097157600080fd5b8063c92b2832146108ed578063d09dc33914610900578063d3c7c2c714610908578063e0351e131461091057600080fd5b80639a113c36116100de5780639a113c3614610742578063a7cd63b7146108af578063a7d3e02f146108c4578063b06d41bc146108d757600080fd5b806376f6ae761461070357806379ba509714610716578063856c82471461071e5780638da5cb5b1461073157600080fd5b8063549e946f116101875780635d86f141116101565780635d86f141146105ae578063704b6c02146105c15780637132721a146105d45780637437ff9f146105e757600080fd5b8063549e946f1461054357806354b714681461055657806354c8a4f314610576578063599f64311461058957600080fd5b806338724a95116101c357806338724a951461048a5780633a87ac53146104ab5780634120fccd146104be578063546719cd146104df57600080fd5b806306285c69146101f55780631772047e146103a6578063181f5a771461042c578063352e4bc814610475575b600080fd5b6103906040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b60405161039d919061499d565b60405180910390f35b6104076103b4366004614a2e565b6040805180820190915260008082526020820152506001600160a01b031660009081526010602090815260409182902082518084019093525461ffff8116835262010000900463ffffffff169082015290565b60408051825161ffff16815260209283015163ffffffff16928101929092520161039d565b6104686040518060400160405280601381526020017f45564d3245564d4f6e52616d7020312e312e300000000000000000000000000081525081565b60405161039d9190614ab9565b610488610483366004614c1a565b610984565b005b61049d610498366004614d50565b6109ed565b60405190815260200161039d565b6104886104b9366004614e21565b610dd9565b6104c6610def565b60405167ffffffffffffffff909116815260200161039d565b6104e7610e23565b60405161039d919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b610488610551366004614e85565b610ed3565b6012546040516bffffffffffffffffffffffff909116815260200161039d565b610488610584366004614f22565b611088565b6002546001600160a01b03165b6040516001600160a01b03909116815260200161039d565b6105966105bc366004614a2e565b61109a565b6104886105cf366004614a2e565b6110f9565b6104886105e2366004614f8e565b6111c3565b6106f66040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e0810182526005546001600160a01b03808216835261ffff740100000000000000000000000000000000000000008084048216602086015263ffffffff76010000000000000000000000000000000000000000000085048116968601969096527a010000000000000000000000000000000000000000000000000000909304166060840152600654908116608084015290810490921660a082015267ffffffffffffffff78010000000000000000000000000000000000000000000000009092049190911660c082015290565b60405161039d9190615026565b6104886107113660046150a1565b6111d4565b61048861128c565b6104c661072c366004614a2e565b61136f565b6000546001600160a01b0316610596565b610845610750366004614a2e565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b03166000908152600f6020908152604091829020825160c081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081049092169281019290925267ffffffffffffffff6c0100000000000000000000000082048116606084015274010000000000000000000000000000000000000000820416608083015260ff7c010000000000000000000000000000000000000000000000000000000090910416151560a082015290565b60405161039d9190600060c08201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015167ffffffffffffffff8082166060850152806080860151166080850152505060a0830151151560a083015292915050565b6108b7611477565b60405161039d9190615116565b61049d6108d2366004615163565b611483565b6108df611eab565b60405161039d929190615211565b6104886108fb366004615253565b611faf565b61049d612017565b6108b7612021565b601254790100000000000000000000000000000000000000000000000000900460ff16604051901515815260200161039d565b6104886109513660046152a3565b6120d2565b61048861096436600461536c565b612138565b6104886121be565b61048861097f366004614a2e565b612455565b6000546001600160a01b031633148015906109aa57506002546001600160a01b03163314155b156109e1576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea81612466565b50565b600080610a05610a006080850185615389565b612695565b9050610a30610a176020850185615389565b8351909150610a2960408701876153ee565b9050612789565b6000600f81610a456080870160608801614a2e565b6001600160a01b031681526020808201929092526040908101600020815160c081018352905463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316918101919091526c01000000000000000000000000820467ffffffffffffffff90811660608301527401000000000000000000000000000000000000000083041660808201527c010000000000000000000000000000000000000000000000000000000090910460ff16151560a08201819052909150610b6257610b1f6080850160608601614a2e565b6040517fa7499d200000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b60065460009081906001600160a01b031663ffdb4b37610b886080890160608a01614a2e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044016040805180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c37919061547e565b909250905060008080610c4d60408a018a6153ee565b90501115610c8657610c7c610c6860808a0160608b01614a2e565b85610c7660408c018c6153ee565b896128ae565b9092509050610ca2565b8451610c9f9063ffffffff16662386f26fc100006154e0565b91505b6080850151610cbb9067ffffffffffffffff16836154e0565b606086015160055491935060009167ffffffffffffffff9091169063ffffffff8416907a010000000000000000000000000000000000000000000000000000900461ffff16610d0d60208d018d615389565b610d189291506154e0565b6005548a51610d4791760100000000000000000000000000000000000000000000900463ffffffff16906154f7565b610d5191906154f7565b610d5b91906154f7565b610d6591906154e0565b610d899077ffffffffffffffffffffffffffffffffffffffffffffffff86166154e0565b9050610dcc670de0b6b3a7640000610da183866154f7565b610dab919061550a565b77ffffffffffffffffffffffffffffffffffffffffffffffff871690612b34565b9998505050505050505050565b610de1612b6d565b610deb8282612be3565b5050565b601254600090610e1e90700100000000000000000000000000000000900467ffffffffffffffff166001615545565b905090565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610e1e90612f43565b6000546001600160a01b03163314801590610ef957506002546001600160a01b03163314155b15610f30576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610f7757506001600160a01b038116155b15610fae576040517f232cb97f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb8612ff5565b1215610ff0576040517f02075e0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610deb9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190615566565b6001600160a01b03851691906130b5565b611090612b6d565b610deb8282613135565b60006110a7600a83613270565b6110e8576040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6110f3600a83613285565b92915050565b6000546001600160a01b0316331480159061111f57506002546001600160a01b03163314155b15611156576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c906020015b60405180910390a150565b6111cb612b6d565b6109ea8161329a565b6000546001600160a01b031633148015906111fa57506002546001600160a01b03163314155b15611231576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610deb8282808060200260200160405190810160405280939291908181526020016000905b82821015611282576112736040830286013681900381019061557f565b81526020019060010190611256565b50505050506135c7565b6001546001600160a01b03163314611300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610b59565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b03811660009081526011602052604081205467ffffffffffffffff16801580156113c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b156110f3576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147091906155be565b9392505050565b6060610e1e600d61383a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150791906155db565b1561153e576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661157e576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254790100000000000000000000000000000000000000000000000000900460ff1680156115b557506115b3600d83613847565b155b156115f7576040517fd0d259760000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6005546001600160a01b0316331461163b576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116458480615389565b905060201461168c576116588480615389565b6040517f370d875f000000000000000000000000000000000000000000000000000000008152600401610b59929190615641565b60006116988580615389565b8101906116a59190615655565b90506001600160a01b038111806116bc5750600a81105b156116cb576116588580615389565b60006116dd610a006080880188615389565b90506117016116ef6020880188615389565b8351909150610a2960408a018a6153ee565b61177561171160408801886153ee565b808060200260200160405190810160405280939291908181526020016000905b8282101561175d5761174e6040830286013681900381019061566e565b81526020019060010190611731565b50506006546001600160a01b03169250613869915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117af6080880160608901614a2e565b6001600160a01b03160361181357601280548691906000906117e09084906bffffffffffffffffffffffff166156a8565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611932565b6006546001600160a01b03166241e5be6118336080890160608a01614a2e565b60405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039182166004820152602481018990527f00000000000000000000000000000000000000000000000000000000000000009091166044820152606401602060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190615566565b601280546000906119039084906bffffffffffffffffffffffff166156a8565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b6012546bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169116111561199f576040517fe5c7a49100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526011602052604090205467ffffffffffffffff161580156119f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611aef576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f91906155be565b6001600160a01b038516600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555b60006040518061018001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020016012601081819054906101000a900467ffffffffffffffff16611b4f906156cd565b825467ffffffffffffffff9182166101009390930a8381029083021990911617909255825260208083018a90526001600160a01b03891660408085018290526000918252601190925290812080546060909401939092611baf91166156cd565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff16815260200183600001518152602001600015158152602001846001600160a01b03168152602001888060200190611c159190615389565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001611c5c60408a018a6153ee565b808060200260200160405190810160405280939291908181526020016000905b82821015611ca857611c996040830286013681900381019061566e565b81526020019060010190611c7c565b5050509183525050602001611cc360808a0160608b01614a2e565b6001600160a01b0316815260006020909101529050611d02817f0000000000000000000000000000000000000000000000000000000000000000613a1c565b61016082015260005b611d1860408901896153ee565b9050811015611e64576000611d3060408a018a6153ee565b83818110611d4057611d406156f4565b905060400201803603810190611d56919061566e565b9050611d65816000015161109a565b6001600160a01b0316639687544588611d7e8c80615389565b60208087015160408051928301815260008352517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152611dec959493927f000000000000000000000000000000000000000000000000000000000000000091600401615723565b6000604051808303816000875af1158015611e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e51919081019061576e565b505080611e5d90615820565b9050611d0b565b507faffc45517195d6499808c643bd4a7b0ffeedf95bea5852840d7bfcf63f59e82181604051611e94919061589c565b60405180910390a161016001519695505050505050565b6060600080611eba6007613b26565b90508067ffffffffffffffff811115611ed557611ed5614acc565b604051908082528060200260200182016040528015611f1a57816020015b6040805180820190915260008082526020820152815260200190600190039081611ef35790505b50925060005b81811015611f8c57600080611f36600784613b31565b915091506040518060400160405280836001600160a01b031681526020018261ffff16815250868481518110611f6e57611f6e6156f4565b6020026020010181905250505080611f8590615820565b9050611f20565b505060125491926c0100000000000000000000000090920463ffffffff16919050565b6000546001600160a01b03163314801590611fd557506002546001600160a01b03163314155b1561200c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea600382613b4f565b6000610e1e612ff5565b6060600061202f600a613d27565b67ffffffffffffffff81111561204757612047614acc565b604051908082528060200260200182016040528015612070578160200160208202803683370190505b50905060005b81518110156120cc5761208a600a82613d32565b5082828151811061209d5761209d6156f4565b60200260200101816001600160a01b03166001600160a01b031681525050806120c590615820565b9050612076565b50919050565b6000546001600160a01b031633148015906120f857506002546001600160a01b03163314155b1561212f576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea81613d41565b612140612b6d565b60128054821515790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fccf4daf6ab6430389f26b970595dab82a5881ad454770907e415ede27c8df032906111b890831515815260200190565b6000546001600160a01b031633148015906121e457506002546001600160a01b03163314155b80156121f857506121f6600733613e28565b155b1561222f576040517f195db95800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff166000819003612283576040517f990e30bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546bffffffffffffffffffffffff16818110156122ce576040517f8d0f71d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122d8612ff5565b1215612310576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600061231d6007613b26565b905060005b8181101561241257600080612338600784613b31565b9092509050600087612358836bffffffffffffffffffffffff8a166154e0565b612362919061550a565b905061236e81876159d9565b95506123b26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016846bffffffffffffffffffffffff84166130b5565b6040516bffffffffffffffffffffffff821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a25050508061240b90615820565b9050612322565b5050601280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790555050565b61245d612b6d565b6109ea81613e3d565b60005b8151811015612665576000828281518110612486576124866156f4565b6020908102919091018101516040805160c080820183528385015163ffffffff9081168352838501518116838701908152606080870151831685870190815260808089015167ffffffffffffffff90811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600f909a5296909820945185549251985191519651945115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9589167401000000000000000000000000000000000000000002959095167fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff979098166c01000000000000000000000000027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff9285166801000000000000000002929092167fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff998516640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941691909416179190911796909616179490941791909116919091179190911790555061265e81615820565b9050612469565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516111b891906159fe565b60408051602081019091526000815260008290036126eb5750604080516020810190915267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526110f3565b7f97a657c9000000000000000000000000000000000000000000000000000000006127168385615ab5565b7fffffffff00000000000000000000000000000000000000000000000000000000161461276f576040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277c8260048186615afd565b8101906114709190615b27565b60065474010000000000000000000000000000000000000000900463ffffffff16808411156127ee576040517f869337890000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610b59565b6006547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16831115612850576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055474010000000000000000000000000000000000000000900461ffff168211156128a8576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60008083815b81811015612ac05760008787838181106128d0576128d06156f4565b9050604002018036038101906128e6919061566e565b80516001600160a01b031660009081526010602090815260409182902082518084019093525461ffff8116835263ffffffff620100009091048116918301919091528251929350909161293d91600a919061327016565b6129815781516040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b59565b805160009061ffff1615612a8e5760008c6001600160a01b031684600001516001600160a01b031614612a3d5760065484516040517f4ab35b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911690634ab35b0b90602401602060405180830381865afa158015612a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a369190615b69565b9050612a40565b508a5b82516020850151620186a09161ffff1690612a769077ffffffffffffffffffffffffffffffffffffffffffffffff851690613f18565b612a8091906154e0565b612a8a919061550a565b9150505b612a9881886154f7565b9650816020015186612aaa9190615b84565b955050505080612ab990615820565b90506128b4565b506000846020015163ffffffff16662386f26fc10000612ae091906154e0565b905080841015612af3579250612b2a9050565b6000856040015163ffffffff16662386f26fc10000612b1291906154e0565b905080851115612b26579350612b2a915050565b5050505b9550959350505050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff8316612b6383670de0b6b3a76400006154e0565b611470919061550a565b6000546001600160a01b03163314612be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b59565b565b60005b8251811015612d44576000838281518110612c0357612c036156f4565b60200260200101516000015190506000848381518110612c2557612c256156f4565b6020026020010151602001519050612c4782600a61327090919063ffffffff16565b612c88576040517f73913ebd0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b6001600160a01b038116612c9d600a84613285565b6001600160a01b031614612cdd576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ce8600a83613f47565b15612d3157604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b505080612d3d90615820565b9050612be6565b5060005b8151811015612f3e576000828281518110612d6557612d656156f4565b60200260200101516000015190506000838381518110612d8757612d876156f4565b602002602001015160200151905060006001600160a01b0316826001600160a01b03161480612dbd57506001600160a01b038116155b15612df4576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e569190615ba1565b6001600160a01b0316826001600160a01b031614612ea0576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eac600a8383613f5c565b15612ef957604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1612f2b565b6040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505080612f3790615820565b9050612d48565b505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152612fd182606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642612fb59190615bbe565b85608001516fffffffffffffffffffffffffffffffff16613f7a565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6012546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916bffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ab9190615566565b610e1e9190615bd1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612f3e908490613fa2565b60005b82518110156131c6576000838281518110613155576131556156f4565b6020026020010151905061317381600d6140a190919063ffffffff16565b156131b5576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506131bf81615820565b9050613138565b5060005b8151811015612f3e5760008282815181106131e7576131e76156f4565b6020026020010151905060006001600160a01b0316816001600160a01b0316036132115750613260565b61321c600d826140b6565b1561325e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b61326981615820565b90506131ca565b6000611470836001600160a01b0384166140cb565b6000611470836001600160a01b0384166140d7565b60808101516001600160a01b03166132de576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600580546020808501516040808701516060808901516001600160a01b039889167fffffffffffffffffffff00000000000000000000000000000000000000000000909716969096177401000000000000000000000000000000000000000061ffff9586168102919091177fffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000063ffffffff948516027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009590971694909402959095179095556080808801516006805460a0808c015160c0808e0151958d167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093179a169096029890981777ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93841602179055825160e0810184527f0000000000000000000000000000000000000000000000000000000000000000891681527f00000000000000000000000000000000000000000000000000000000000000008216958101959095527f00000000000000000000000000000000000000000000000000000000000000008116858401527f000000000000000000000000000000000000000000000000000000000000000016948401949094527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16938301939093527f00000000000000000000000000000000000000000000000000000000000000008516908201527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517f72c6aaba4dde02f77d291123a76185c418ba63f8c217a2d56b08aec84e9bbfb8916111b8918490615bf1565b80516040811115613604576040517fb5a10cfa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6012546c01000000000000000000000000900463ffffffff1615801590613652575060125463ffffffff6c010000000000000000000000008204166bffffffffffffffffffffffff90911610155b1561365f5761365f6121be565b600061366b6007613b26565b90505b80156136ad57600061368c613684600184615bbe565b600790613b31565b50905061369a6007826140e3565b5050806136a690615ce6565b905061366e565b506000805b828110156137bb5760008482815181106136ce576136ce6156f4565b602002602001015160000151905060008583815181106136f0576136f06156f4565b60200260200101516020015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061374557506001600160a01b038216155b15613787576040517f4de938d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b59565b61379760078361ffff84166140f8565b506137a661ffff821685615b84565b93505050806137b490615820565b90506136b2565b50601280547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd249061382d9083908690615d1b565b60405180910390a1505050565b606060006114708361410e565b6001600160a01b03811660009081526001830160205260408120541515611470565b81516000805b82811015613a0e576000846001600160a01b031663d02641a087848151811061389a5761389a6156f4565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015613901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139259190615d3a565b51905077ffffffffffffffffffffffffffffffffffffffffffffffff81166000036139a65785828151811061395c5761395c6156f4565b6020908102919091010151516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b59565b6139f08683815181106139bb576139bb6156f4565b6020026020010151602001518277ffffffffffffffffffffffffffffffffffffffffffffffff16613f1890919063ffffffff16565b6139fa90846154f7565b92505080613a0790615820565b905061386f565b506128a8600382600061416a565b60008060001b828460200151856080015186606001518760e0015188610100015180519060200120896101200151604051602001613a5a9190615d6d565b604051602081830303815290604052805190602001208a60a001518b60c001518c61014001518d60400151604051602001613b089c9b9a999897969594939291909b8c5260208c019a909a5267ffffffffffffffff98891660408c01529690971660608a01526001600160a01b0394851660808a015292841660a089015260c088019190915260e0870152610100860152911515610120850152166101408301526101608201526101800190565b60405160208183030381529060405280519060200120905092915050565b60006110f3826144b9565b6000808080613b4086866144c4565b909450925050505b9250929050565b8154600090613b7890700100000000000000000000000000000000900463ffffffff1642615bbe565b90508015613c1a5760018301548354613bc0916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613f7a565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354613c40916fffffffffffffffffffffffffffffffff90811691166144ef565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061382d9084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60006110f382613b26565b6000808080613b408686613b31565b60005b8151811015613df8576000828281518110613d6157613d616156f4565b6020908102919091018101516040805180820182528284015161ffff90811682528284015163ffffffff90811683870190815294516001600160a01b0316600090815260109096529290942090518154935190921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316919093161717905550613df181615820565b9050613d44565b507f4230c60a9725eb5fb992cf6a215398b4e81b4606d4a1e6be8dfe0b60dc172ec1816040516111b89190615d80565b6000611470836001600160a01b038416614505565b336001600160a01b03821603613eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b59565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000670de0b6b3a7640000612b638377ffffffffffffffffffffffffffffffffffffffffffffffff86166154e0565b6000611470836001600160a01b038416614511565b6000613f72846001600160a01b0385168461451d565b949350505050565b6000613f9985613f8a84866154e0565b613f9490876154f7565b6144ef565b95945050505050565b6000613ff7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145339092919063ffffffff16565b805190915015612f3e578080602001905181019061401591906155db565b612f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b59565b6000611470836001600160a01b038416614542565b6000611470836001600160a01b03841661463c565b60006114708383614505565b6000611470838361468b565b6000611470836001600160a01b038416614715565b6000613f72846001600160a01b03851684614732565b60608160000180548060200260200160405190810160405280929190818152602001828054801561415e57602002820191906000526020600020905b81548152602001906001019080831161414a575b50505050509050919050565b825474010000000000000000000000000000000000000000900460ff161580614191575081155b1561419b57505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906141e190700100000000000000000000000000000000900463ffffffff1642615bbe565b905080156142a15781831115614223576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461425d9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613f7a565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561433e576001600160a01b0384166142f3576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610b59565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b0385166044820152606401610b59565b848310156144375760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906143829082615bbe565b61438c878a615bbe565b61439691906154f7565b6143a0919061550a565b90506001600160a01b0386166143ec576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610b59565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b0387166044820152606401610b59565b6144418584615bbe565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b60006110f38261474f565b600080806144d28585614759565b600081815260029690960160205260409095205494959350505050565b60008183106144fe5781611470565b5090919050565b60006114708383614765565b60006114708383614715565b6000613f7284846001600160a01b038516614732565b6060613f72848460008561477d565b6000818152600183016020526040812054801561462b576000614566600183615bbe565b855490915060009061457a90600190615bbe565b90508181146145df57600086600001828154811061459a5761459a6156f4565b90600052602060002001549050808760000184815481106145bd576145bd6156f4565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615ddf565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506110f3565b60009150506110f3565b5092915050565b6000818152600183016020526040812054614683575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556110f3565b5060006110f3565b6000818152600283016020526040812054801515806146af57506146af8484614505565b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b59565b600081815260028301602052604081208190556114708383614889565b60008281526002840160205260408120829055613f728484614895565b60006110f3825490565b600061147083836148a1565b60008181526001830160205260408120541515611470565b60608247101561480f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b59565b600080866001600160a01b0316858760405161482b9190615e0e565b60006040518083038185875af1925050503d8060008114614868576040519150601f19603f3d011682016040523d82523d6000602084013e61486d565b606091505b509150915061487e878383876148cb565b979650505050505050565b60006114708383614542565b6000611470838361463c565b60008260000182815481106148b8576148b86156f4565b9060005260206000200154905092915050565b6060831561495457825160000361494d576001600160a01b0385163b61494d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b59565b5081613f72565b613f7283838151156149695781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b599190614ab9565b60e081016110f382846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b6001600160a01b03811681146109ea57600080fd5b600060208284031215614a4057600080fd5b813561147081614a19565b60005b83811015614a66578181015183820152602001614a4e565b50506000910152565b60008151808452614a87816020860160208601614a4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006114706020830184614a6f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b60405290565b6040805190810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b6040516060810167ffffffffffffffff81118282101715614b1e57614b1e614acc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614bb157614bb1614acc565b604052919050565b600067ffffffffffffffff821115614bd357614bd3614acc565b5060051b60200190565b803563ffffffff81168114614bf157600080fd5b919050565b67ffffffffffffffff811681146109ea57600080fd5b80151581146109ea57600080fd5b60006020808385031215614c2d57600080fd5b823567ffffffffffffffff811115614c4457600080fd5b8301601f81018513614c5557600080fd5b8035614c68614c6382614bb9565b614b6a565b81815260e09182028301840191848201919088841115614c8757600080fd5b938501935b83851015614d325780858a031215614ca45760008081fd5b614cac614afb565b8535614cb781614a19565b8152614cc4868801614bdd565b878201526040614cd5818801614bdd565b908201526060614ce6878201614bdd565b90820152608086810135614cf981614bf6565b9082015260a086810135614d0c81614bf6565b9082015260c086810135614d1f81614c0c565b9082015283529384019391850191614c8c565b50979650505050505050565b600060a082840312156120cc57600080fd5b600060208284031215614d6257600080fd5b813567ffffffffffffffff811115614d7957600080fd5b613f7284828501614d3e565b600082601f830112614d9657600080fd5b81356020614da6614c6383614bb9565b82815260069290921b84018101918181019086841115614dc557600080fd5b8286015b84811015614e165760408189031215614de25760008081fd5b614dea614b24565b8135614df581614a19565b815281850135614e0481614a19565b81860152835291830191604001614dc9565b509695505050505050565b60008060408385031215614e3457600080fd5b823567ffffffffffffffff80821115614e4c57600080fd5b614e5886838701614d85565b93506020850135915080821115614e6e57600080fd5b50614e7b85828601614d85565b9150509250929050565b60008060408385031215614e9857600080fd5b8235614ea381614a19565b91506020830135614eb381614a19565b809150509250929050565b600082601f830112614ecf57600080fd5b81356020614edf614c6383614bb9565b82815260059290921b84018101918181019086841115614efe57600080fd5b8286015b84811015614e16578035614f1581614a19565b8352918301918301614f02565b60008060408385031215614f3557600080fd5b823567ffffffffffffffff80821115614f4d57600080fd5b614f5986838701614ebe565b93506020850135915080821115614f6f57600080fd5b50614e7b85828601614ebe565b803561ffff81168114614bf157600080fd5b600060e08284031215614fa057600080fd5b614fa8614afb565b8235614fb381614a19565b8152614fc160208401614f7c565b6020820152614fd260408401614bdd565b6040820152614fe360608401614f7c565b60608201526080830135614ff681614a19565b608082015261500760a08401614bdd565b60a082015260c083013561501a81614bf6565b60c08201529392505050565b60e081016110f382846001600160a01b03808251168352602082015161ffff80821660208601526040840151915063ffffffff80831660408701528160608601511660608701528360808601511660808701528060a08601511660a08701525050505067ffffffffffffffff60c08201511660c08301525050565b600080602083850312156150b457600080fd5b823567ffffffffffffffff808211156150cc57600080fd5b818501915085601f8301126150e057600080fd5b8135818111156150ef57600080fd5b8660208260061b850101111561510457600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156151575783516001600160a01b031683529284019291840191600101615132565b50909695505050505050565b60008060006060848603121561517857600080fd5b833567ffffffffffffffff81111561518f57600080fd5b61519b86828701614d3e565b9350506020840135915060408401356151b381614a19565b809150509250925092565b600081518084526020808501945080840160005b8381101561520657815180516001600160a01b0316885283015161ffff1683880152604090960195908201906001016151d2565b509495945050505050565b60408152600061522460408301856151be565b90508260208301529392505050565b80356fffffffffffffffffffffffffffffffff81168114614bf157600080fd5b60006060828403121561526557600080fd5b61526d614b47565b823561527881614c0c565b815261528660208401615233565b602082015261529760408401615233565b60408201529392505050565b600060208083850312156152b657600080fd5b823567ffffffffffffffff8111156152cd57600080fd5b8301601f810185136152de57600080fd5b80356152ec614c6382614bb9565b8181526060918202830184019184820191908884111561530b57600080fd5b938501935b83851015614d325780858a0312156153285760008081fd5b615330614b47565b853561533b81614a19565b8152615348868801614f7c565b878201526040615359818801614bdd565b9082015283529384019391850191615310565b60006020828403121561537e57600080fd5b813561147081614c0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126153be57600080fd5b83018035915067ffffffffffffffff8211156153d957600080fd5b602001915036819003821315613b4857600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261542357600080fd5b83018035915067ffffffffffffffff82111561543e57600080fd5b6020019150600681901b3603821315613b4857600080fd5b805177ffffffffffffffffffffffffffffffffffffffffffffffff81168114614bf157600080fd5b6000806040838503121561549157600080fd5b61549a83615456565b91506154a860208401615456565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176110f3576110f36154b1565b808201808211156110f3576110f36154b1565b600082615540577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b67ffffffffffffffff818116838216019080821115614635576146356154b1565b60006020828403121561557857600080fd5b5051919050565b60006040828403121561559157600080fd5b615599614b24565b82356155a481614a19565b81526155b260208401614f7c565b60208201529392505050565b6000602082840312156155d057600080fd5b815161147081614bf6565b6000602082840312156155ed57600080fd5b815161147081614c0c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613f726020830184866155f8565b60006020828403121561566757600080fd5b5035919050565b60006040828403121561568057600080fd5b615688614b24565b823561569381614a19565b81526020928301359281019290925250919050565b6bffffffffffffffffffffffff818116838216019080821115614635576146356154b1565b600067ffffffffffffffff8083168181036156ea576156ea6154b1565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b038716815260a06020820152600061574660a0830187896155f8565b85604084015267ffffffffffffffff851660608401528281036080840152610dcc8185614a6f565b60006020828403121561578057600080fd5b815167ffffffffffffffff8082111561579857600080fd5b818401915084601f8301126157ac57600080fd5b8151818111156157be576157be614acc565b6157ef60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614b6a565b915080825285602082850101111561580657600080fd5b615817816020840160208601614a4b565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615851576158516154b1565b5060010190565b600081518084526020808501945080840160005b8381101561520657815180516001600160a01b03168852830151838801526040909601959082019060010161586c565b602081526158b760208201835167ffffffffffffffff169052565b600060208301516158d4604084018267ffffffffffffffff169052565b506040830151606083015260608301516158f960808401826001600160a01b03169052565b50608083015167ffffffffffffffff811660a08401525060a083015160c083015260c083015161592d60e084018215159052565b5060e083015161010061594a818501836001600160a01b03169052565b80850151915050610180610120818186015261596a6101a0860184614a6f565b92508086015190506101407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086850301818701526159a88483615858565b9350808701519150506101606159c8818701836001600160a01b03169052565b959095015193019290925250919050565b6bffffffffffffffffffffffff828116828216039080821115614635576146356154b1565b602080825282518282018190526000919060409081850190868401855b82811015615aa857815180516001600160a01b031685528681015163ffffffff90811688870152868201518116878701526060808301519091169086015260808082015167ffffffffffffffff169086015260a080820151615a888288018267ffffffffffffffff169052565b505060c09081015115159085015260e09093019290850190600101615a1b565b5091979650505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015615af55780818660040360031b1b83161692505b505092915050565b60008085851115615b0d57600080fd5b83861115615b1a57600080fd5b5050820193919092039150565b600060208284031215615b3957600080fd5b6040516020810181811067ffffffffffffffff82111715615b5c57615b5c614acc565b6040529135825250919050565b600060208284031215615b7b57600080fd5b61147082615456565b63ffffffff818116838216019080821115614635576146356154b1565b600060208284031215615bb357600080fd5b815161147081614a19565b818103818111156110f3576110f36154b1565b8181036000831280158383131683831282161715614635576146356154b1565b6101c08101615c6e82856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b82516001600160a01b0390811660e0840152602084015161ffff908116610100850152604085015163ffffffff9081166101208601526060860151909116610140850152608085015190911661016084015260a08401511661018083015260c083015167ffffffffffffffff166101a0830152611470565b600081615cf557615cf56154b1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b63ffffffff83168152604060208201526000613f7260408301846151be565b600060408284031215615d4c57600080fd5b615d54614b24565b615d5d83615456565b815260208301516155b281614bf6565b6020815260006114706020830184615858565b602080825282518282018190526000919060409081850190868401855b82811015615aa857815180516001600160a01b031685528681015161ffff168786015285015163ffffffff168585015260609093019290850190600101615d9d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615e20818460208701614a4b565b919091019291505056fea164736f6c6343000813000a",
    "sourceMap": "1585:37111:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18666:393;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18756:298:49;;;;;;;;18790:11;-1:-1:-1;;;;;18756:298:49;;;;;18826:15;18756:298;;;;;;18870:19;18756:298;;;;;;18918:19;18756:298;;;;;;18964:17;18756:298;;;;;;19003:12;-1:-1:-1;;;;;18756:298:49;;;;;19035:10;-1:-1:-1;;;;;18756:298:49;;;;18743:311;;18666:393;;;;;;;;;:::i;:::-;;;;;;;;29134:184;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;29282:31:49;;;;;:24;:31;;;;;;;;;29275:38;;;;;;;;;;;;;;;;;;;;;;;;29134:184;;;;;1847:13:138;;1862:6;1843:26;1825:45;;1930:4;1918:17;;;1912:24;1938:10;1908:41;1886:20;;;1879:71;;;;1798:18;29134:184:49;1597:359:138;7374:70:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28172:150::-;;;;;;:::i;:::-;;:::i;:::-;;22649:2379;;;;;;:::i;:::-;;:::i;:::-;;;7429:25:138;;;7417:2;7402:18;22649:2379:49;7283:177:138;21155:173:49;;;;;;:::i;:::-;;:::i;12425:110::-;;;:::i;:::-;;;9447:18:138;9435:31;;;9417:50;;9405:2;9390:18;12425:110:49;9273:200:138;2434:148:20;;;:::i;:::-;;;;;;9856:13:138;;9791:34;9852:22;;;9834:41;;9935:4;9923:17;;;9917:24;9943:10;9913:41;9891:20;;;9884:71;10025:4;10013:17;;;10007:24;10000:32;9993:40;9971:20;;;9964:70;10094:4;10082:17;;;10076:24;10072:33;;10050:20;;;10043:63;10166:4;10154:17;;;10148:24;10144:33;10122:20;;;10115:63;;;;9768:3;9753:19;;9574:610;34653:429:49;;;;;;:::i;:::-;;:::i;30508:90::-;30579:14;;30508:90;;30579:14;;;;10726:58:138;;10714:2;10699:18;30508:90:49;10582:208:138;37007:147:49;;;;;;:::i;:::-;;:::i;3203:87:20:-;3278:7;;-1:-1:-1;;;;;3278:7:20;3203:87;;;-1:-1:-1;;;;;12319:55:138;;;12301:74;;12289:2;12274:18;3203:87:20;12155:226:138;20797:249:49;;;;;;:::i;:::-;;:::i;3470:120:20:-;;;;;;:::i;:::-;;:::i;19375:124:49:-;;;;;;:::i;:::-;;:::i;19159:120::-;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19252:22:49;;;;;;;;19259:15;19252:22;-1:-1:-1;;;;;19252:22:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19159:120;;;;;;;;:::i;31341:118::-;;;;;;:::i;:::-;;:::i;1001:265:115:-;;;:::i;12572:375:49:-;;;;;;:::i;:::-;;:::i;1317:81:115:-;1364:7;1386;-1:-1:-1;;;;;1386:7:115;1317:81;;27902:144:49;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28018:23:49;;;;;:16;:23;;;;;;;;;28011:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27902:144;;;;;;;15792:4:138;15834:3;15823:9;15819:19;15811:27;;15857:10;15913:2;15904:6;15898:13;15894:22;15883:9;15876:41;15985:2;15977:4;15969:6;15965:17;15959:24;15955:33;15948:4;15937:9;15933:20;15926:63;16057:2;16049:4;16041:6;16037:17;16031:24;16027:33;16020:4;16009:9;16005:20;15998:63;;16108:4;16100:6;16096:17;16090:24;16133:18;16207:2;16193:12;16189:21;16182:4;16171:9;16167:20;16160:51;16279:2;16271:4;16263:6;16259:17;16253:24;16249:33;16242:4;16231:9;16227:20;16220:63;;;16353:4;16345:6;16341:17;16335:24;16328:32;16321:40;16314:4;16303:9;16299:20;16292:70;15634:734;;;;;36697:103:49;;;:::i;:::-;;;;;;;:::i;12984:3768::-;;;;;;:::i;:::-;;:::i;30761:472::-;;;:::i;:::-;;;;;;;;:::i;2749:144:20:-;;;;;;:::i;:::-;;:::i;35709:107:49:-;;;:::i;20459:301::-;;;:::i;36143:96::-;36216:18;;;;;;;36143:96;;19865:14:138;;19858:22;19840:41;;19828:2;19813:18;36143:96:49;19700:187:138;29414:198:49;;;;;;:::i;:::-;;:::i;36376:140::-;;;;;;:::i;:::-;;:::i;33556:914::-;;;:::i;811:98:115:-;;;;;;:::i;:::-;;:::i;28172:150:49:-;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38392:10:49;:21;;;;:46;;-1:-1:-1;38431:7:49;;-1:-1:-1;;;;;38431:7:49;38417:10;:21;;38392:46;38388:87;;;38447:28;;;;;;;;;;;;;;38388:87;28279:38:::1;28298:18;28279;:38::i;:::-;28172:150:::0;:::o;22649:2379::-;22728:7;;22784:29;22795:17;;;;:7;:17;:::i;:::-;22784:10;:29::i;:::-;22743:70;-1:-1:-1;22867:86:49;22884:12;;;;:7;:12;:::i;:::-;22905:18;;22884:19;;-1:-1:-1;22925:20:49;;;;:7;:20;:::i;:::-;:27;;22867:16;:86::i;:::-;22960:36;22999:16;22960:36;23016:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22999:34:49;;;;;;;;;;;;;;;-1:-1:-1;22999:34:49;22960:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23039:66:49;;23088:16;;;;;;;;:::i;:::-;23075:30;;;;;-1:-1:-1;;;;;12319:55:138;;;23075:30:49;;;12301:74:138;12274:18;;23075:30:49;;;;;;;;23039:66;23171:29;;23113:21;;;;-1:-1:-1;;;;;23171:29:49;23156:66;23230:16;;;;;;;;:::i;:::-;23156:123;;;;;;;;;;-1:-1:-1;;;;;22992:55:138;;;23156:123:49;;;22974:74:138;23096:18;23254:19:49;23084:31:138;23064:18;;;23057:59;22947:18;;23156:123:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23112:167;;-1:-1:-1;23112:167:49;-1:-1:-1;23507:21:49;;;23575:20;;;;:7;:20;:::i;:::-;:27;;:31;23571:361;;;23652:132;23683:16;;;;;;;;:::i;:::-;23709:13;23732:20;;;;:7;:20;:::i;:::-;23762:14;23652:21;:132::i;:::-;23616:168;;-1:-1:-1;23616:168:49;-1:-1:-1;23571:361:49;;;23889:28;;23881:44;;:37;;23921:4;23881:44;:::i;:::-;23865:60;;23571:361;24054:32;;;;24038:48;;;;:13;:48;:::i;:::-;24575:28;;;;24507:15;:37;24022:64;;-1:-1:-1;24360:24:49;;24405:198;;;;;24406:165;;;;24507:37;;;;;24477:12;;;;;;:::i;:::-;:67;;;-1:-1:-1;24477:67:49;:::i;:::-;24435:15;:31;24406:18;;:60;;24435:31;;;;;;24406:60;:::i;:::-;:138;;;;:::i;:::-;:165;;;;:::i;:::-;24405:198;;;;:::i;:::-;24387:217;;;;;;:::i;:::-;24360:244;-1:-1:-1;24935:88:49;25015:7;24979:32;24360:244;24979:13;:32;:::i;:::-;24978:44;;;;:::i;:::-;24935:42;;;;;:88::i;:::-;24928:95;22649:2379;-1:-1:-1;;;;;;;;;22649:2379:49:o;21155:173::-;1941:20:115;:18;:20::i;:::-;21291:32:49::1;21309:7;21318:4;21291:17;:32::i;:::-;21155:173:::0;;:::o;12425:110::-;12510:16;;12489:6;;12510:20;;:16;;;;;12529:1;12510:20;:::i;:::-;12503:27;;12425:110;:::o;2434:148:20:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2537:38:20;;;;;;;;:13;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;:38;:40::i;34653:429:49:-;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38392:10:49;:21;;;;:46;;-1:-1:-1;38431:7:49;;-1:-1:-1;;;;;38431:7:49;38417:10;:21;;38392:46;38388:87;;;38447:28;;;;;;;;;;;;;;38388:87;34760:11:::1;-1:-1:-1::0;;;;;34748:23:49::1;:8;-1:-1:-1::0;;;;;34748:23:49::1;;:43;;;-1:-1:-1::0;;;;;;34775:16:49;::::1;::::0;34748:43:::1;34744:79;;;34800:23;;;;;;;;;;;;;;34744:79;34961:1;34935:23;:21;:23::i;:::-;:27;34931:63;;;34971:23;;;;;;;;;;;;;;34931:63;35035:41;::::0;;;;35070:4:::1;35035:41;::::0;::::1;12301:74:138::0;35001:76:49::1;::::0;35031:2;;-1:-1:-1;;;;;35035:26:49;::::1;::::0;::::1;::::0;12274:18:138;;35035:41:49::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35001:29:49;::::1;::::0;:76;:29:::1;:76::i;37007:147::-:0;1941:20:115;:18;:20::i;:::-;37112:37:49::1;37135:7;37144:4;37112:22;:37::i;20797:249::-:0;20868:5;20886:51;:20;20924:11;20886:29;:51::i;:::-;20881:94;;20946:29;;;;;-1:-1:-1;;;;;12319:55:138;;20946:29:49;;;12301:74:138;12274:18;;20946:29:49;12155:226:138;20881:94:49;20994:46;:20;21027:11;20994:24;:46::i;:::-;20981:60;20797:249;-1:-1:-1;;20797:249:49:o;3470:120:20:-;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;3747:10:20;:21;;;;:46;;-1:-1:-1;3786:7:20;;-1:-1:-1;;;;;3786:7:20;3772:10;:21;;3747:46;3743:99;;;3802:40;;;;;;;;;;;;;;3743:99;3538:7:::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;3538:18:20;::::1;::::0;;::::1;::::0;;;3567::::1;::::0;12301:74:138;;;3567:18:20::1;::::0;12289:2:138;12274:18;3567::20::1;;;;;;;;3470:120:::0;:::o;19375:124:49:-;1941:20:115;:18;:20::i;:::-;19462:32:49::1;19480:13;19462:17;:32::i;31341:118::-:0;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38392:10:49;:21;;;;:46;;-1:-1:-1;38431:7:49;;-1:-1:-1;;;;;38431:7:49;38417:10;:21;;38392:46;38388:87;;;38447:28;;;;;;;;;;;;;;38388:87;31430:24:::1;31439:14;;31430:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:8;:24::i;1001:265:115:-:0;1074:14;;-1:-1:-1;;;;;1074:14:115;1060:10;:28;1052:63;;;;;;;25665:2:138;1052:63:115;;;25647:21:138;25704:2;25684:18;;;25677:30;25743:24;25723:18;;;25716:52;25785:18;;1052:63:115;25463:346:138;1052:63:115;1122:16;1141:7;;1164:10;1154:20;;;;;;;;-1:-1:-1;1180:27:115;;;;;;;1219:42;;-1:-1:-1;;;;;1141:7:115;;;;1164:10;;1141:7;;1219:42;;;1046:220;1001:265::o;12572:375:49:-;-1:-1:-1;;;;;12671:21:49;;12635:6;12671:21;;;:13;:21;;;;;;;;12703:16;;:46;;;;-1:-1:-1;12723:12:49;-1:-1:-1;;;;;12723:26:49;;;12703:46;12699:212;;;12853:51;;;;;-1:-1:-1;;;;;12319:55:138;;;12853:51:49;;;12301:74:138;12868:12:49;12853:43;;;;12274:18:138;;12853:51:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12846:58;12572:375;-1:-1:-1;;;12572:375:49:o;36697:103::-;36744:16;36775:20;:11;:18;:20::i;12984:3768::-;13145:7;38637:10;-1:-1:-1;;;;;38632:25:49;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38628:54;;;38668:14;;;;;;;;;;;;;;38628:54;-1:-1:-1;;;;;13270:28:49;::::1;13266:70;;13307:29;;;;;;;;;;;;;;13266:70;13346:18;::::0;;;::::1;;;:59:::0;::::1;;;-1:-1:-1::0;13369:36:49::1;:11;13390:14:::0;13369:20:::1;:36::i;:::-;13368:37;13346:59;13342:104;;;13414:32;::::0;::::1;::::0;;-1:-1:-1;;;;;12319:55:138;;13414:32:49::1;::::0;::::1;12301:74:138::0;12274:18;;13414:32:49::1;12155:226:138::0;13342:104:49::1;13528:15;:22:::0;-1:-1:-1;;;;;13528:22:49::1;13514:10;:36;13510:71;;13559:22;;;;;;;;;;;;;;13510:71;13785:16;:7:::0;;:16:::1;:::i;:::-;:23;;13812:2;13785:29;13781:74;;13838:16;:7:::0;;:16:::1;:::i;:::-;13823:32;;;;;;;;;;;;:::i;13781:74::-;13861:23;13898:16;:7:::0;;:16:::1;:::i;:::-;13887:39;;;;;;;:::i;:::-;13861:65:::0;-1:-1:-1;;;;;;14051:35:49;::::1;::::0;:59:::1;;;14108:2;14090:15;:20;14051:59;14047:104;;;14134:16;:7:::0;;:16:::1;:::i;14047:104::-;14158:38;14199:29;14210:17;;::::0;::::1;:7:::0;:17:::1;:::i;14199:29::-;14158:70:::0;-1:-1:-1;14282:86:49::1;14299:12;;::::0;::::1;:7:::0;:12:::1;:::i;:::-;14320:18:::0;;14299:19;;-1:-1:-1;14340:20:49::1;;::::0;::::1;:7:::0;:20:::1;:::i;14282:86::-;14419:84;14435:20;;::::0;::::1;:7:::0;:20:::1;:::i;:::-;14419:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;-1:-1:-1::0;;14472:29:49;;-1:-1:-1;;;;;14472:29:49::1;::::0;-1:-1:-1;14419:15:49::1;::::0;-1:-1:-1;;14419:84:49:i:1;:::-;-1:-1:-1::0;;;;;14589:11:49::1;14569:31;:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;14569:31:49::1;::::0;14565:429:::1;;14660:14;:40:::0;;14685:14;;14660;::::1;::::0;:40:::1;::::0;14685:14;;14660:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14565:429;;;14883:29:::0;;-1:-1:-1;;;;;14883:29:49::1;14868:64;14933:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;14868:111;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;27985:15:138;;;14868:111:49::1;::::0;::::1;27967:34:138::0;28017:18;;;28010:34;;;14967:11:49::1;28080:15:138::0;;;28060:18;;;28053:43;27879:18;;14868:111:49::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14834:14;:153:::0;;:14:::1;::::0;:153:::1;::::0;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14565:429;15003:14;::::0;:34:::1;15020:17;15003:34:::0;::::1;:14:::0;::::1;:34;14999:69;;;15046:22;;;;;;;;;;;;;;14999:69;-1:-1:-1::0;;;;;15079:29:49;::::1;;::::0;;;:13:::1;:29;::::0;;;;;::::1;;:34:::0;:64;::::1;;;-1:-1:-1::0;15117:12:49::1;-1:-1:-1::0;;;;;15117:26:49::1;::::0;::::1;15079:64;15075:339;;;15348:59;::::0;;;;-1:-1:-1;;;;;12319:55:138;;;15348:59:49::1;::::0;::::1;12301:74:138::0;15363:12:49::1;15348:43;::::0;::::1;::::0;12274:18:138;;15348:59:49::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15316:29:49;::::1;;::::0;;;:13:::1;:29;::::0;;;;:91;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;15075:339:::1;15510:41;15554:462;;;;;;;;15607:15;15554:462;;;;;;15648:16;;15646:18;;;;;;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;;::::0;;;15554:462;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;15554:462:49;::::1;::::0;;;;;;;-1:-1:-1;15749:29:49;;;:13:::1;:29:::0;;;;;;15747:31;;15554:462;;;;;15749:29;;15747:31:::1;::::0;::::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;15554:462;;;;;;15796:9;:18;;;15554:462;;;;15830:5;15554:462;;;;;;15869:15;-1:-1:-1::0;;;;;15554:462:49::1;;;;;15900:7;:12;;;;;;;;:::i;:::-;15554:462;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;15554:462:49;;;-1:-1:-1;15554:462:49::1;;15934:20;;::::0;::::1;:7:::0;:20:::1;:::i;:::-;15554:462;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;-1:-1:-1::0;;;15554:462:49;;;-1:-1:-1;;15554:462:49::1;;15972:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;15554:462:49::1;::::0;;::::1;;::::0;;::::1;::::0;15510:506;-1:-1:-1;16045:42:49::1;15510:506:::0;16072:14:::1;16045;:42::i;:::-;16022:20;::::0;::::1;:65:::0;16249:9:::1;16244:402;16268:20;;::::0;::::1;:7:::0;:20:::1;:::i;:::-;:27;;16264:1;:31;16244:402;;;16310:43;16356:20;;::::0;::::1;:7:::0;:20:::1;:::i;:::-;16377:1;16356:23;;;;;;;:::i;:::-;;;;;;16310:69;;;;;;;;;;:::i;:::-;;;16387:50;16415:14;:20;;;16387;:50::i;:::-;-1:-1:-1::0;;;;;16387:61:49::1;;16458:14:::0;16482:16:::1;:7:::0;;:16:::1;:::i;:::-;16508:21;::::0;;::::1;::::0;16568:9:::1;::::0;;;;::::1;::::0;;-1:-1:-1;16568:9:49;;16387:252;;::::1;::::0;;;;;;::::1;::::0;;;;16539:19:::1;::::0;16387:252:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;16302:344;16297:3;;;;:::i;:::-;;;16244:402;;;;16685:29;16703:10;16685:29;;;;;;:::i;:::-;;;;;;;;16727:20;;::::0;;12984:3768;-1:-1:-1;;;;;;12984:3768:49:o;30761:472::-;30803:36;30841:20;30869:14;30886:15;:6;:13;:15::i;:::-;30869:32;;30943:6;30924:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;30924:26:49;;;;;;;;;;;;;;;;30907:43;;30961:9;30956:192;30980:6;30976:1;:10;30956:192;;;31002:18;;31043:12;:6;31053:1;31043:9;:12::i;:::-;31001:54;;;;31083:58;;;;;;;;31102:10;-1:-1:-1;;;;;31083:58:49;;;;;31129:9;31083:58;;;;;31063:14;31078:1;31063:17;;;;;;;;:::i;:::-;;;;;;:78;;;;30993:155;;30988:3;;;;:::i;:::-;;;30956:192;;;-1:-1:-1;;31168:17:49;;30761:472;;31168:17;;;;;;;30761:472;-1:-1:-1;30761:472:49:o;2749:144:20:-;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;3747:10:20;:21;;;;:46;;-1:-1:-1;3786:7:20;;-1:-1:-1;;;;;3786:7:20;3772:10;:21;;3747:46;3743:99;;;3802:40;;;;;;;;;;;;;;3743:99;2845:43:::1;:13;2881:6:::0;2845:35:::1;:43::i;35709:107:49:-:0;35767:6;35788:23;:21;:23::i;20459:301::-;20512:16;20536:29;20582;:20;:27;:29::i;:::-;20568:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20568:44:49;;20536:76;;20623:9;20618:113;20642:12;:19;20638:1;:23;20618:113;;;20698:26;:20;20722:1;20698:23;:26::i;:::-;20676:48;20677:12;20690:1;20677:15;;;;;;;;:::i;:::-;;;;;;20676:48;-1:-1:-1;;;;;20676:48:49;-1:-1:-1;;;;;20676:48:49;;;;;20663:3;;;;:::i;:::-;;;20618:113;;;-1:-1:-1;20743:12:49;20459:301;-1:-1:-1;20459:301:49:o;29414:198::-;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38392:10:49;:21;;;;:46;;-1:-1:-1;38431:7:49;;-1:-1:-1;;;;;38431:7:49;38417:10;:21;;38392:46;38388:87;;;38447:28;;;;;;;;;;;;;;38388:87;29553:54:::1;29580:26;29553;:54::i;36376:140::-:0;1941:20:115;:18;:20::i;:::-;36444:18:49::1;:28:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;36483::::1;::::0;::::1;::::0;::::1;::::0;36465:7;19865:14:138;19858:22;19840:41;;19828:2;19813:18;;19700:187;33556:914:49;1364:7:115;1386;-1:-1:-1;;;;;1386:7:115;38147:10:49;:21;;;;:46;;-1:-1:-1;38186:7:49;;-1:-1:-1;;;;;38186:7:49;38172:10;:21;;38147:46;:78;;;;-1:-1:-1;38198:27:49;:6;38214:10;38198:15;:27::i;:::-;38197:28;38147:78;38143:130;;;38240:33;;;;;;;;;;;;;;38143:130;33633:17:::1;::::0;;;::::1;;;33610:20;33660:17:::0;;;33656:43:::1;;33686:13;;;;;;;;;;;;;;33656:43;33730:14;::::0;::::1;;33754:29:::0;;::::1;33750:55;;;33792:13;;;;;;;;;;;;;;33750:55;33841:1;33815:23;:21;:23::i;:::-;:27;33811:61;;;33851:21;;;;;;;;;;;;;;33811:61;33898:14:::0;33879:16:::1;33941:15;:6;:13;:15::i;:::-;33918:38;;33967:9;33962:373;33986:12;33982:1;:16;33962:373;;;34014:11;::::0;34045:12:::1;:6;34055:1:::0;34045:9:::1;:12::i;:::-;34013:44:::0;;-1:-1:-1;34013:44:49;-1:-1:-1;34151:13:49::1;34202:12:::0;34175:23:::1;34013:44:::0;34175:23:::1;::::0;::::1;;:::i;:::-;34174:40;;;;:::i;:::-;34151:64:::0;-1:-1:-1;34223:19:49::1;34151:64:::0;34223:19;::::1;:::i;:::-;::::0;-1:-1:-1;34250:45:49::1;-1:-1:-1::0;;;;;34257:11:49::1;34250:32;34283:3:::0;34250:45:::1;::::0;::::1;:32;:45::i;:::-;34308:20;::::0;10756:26:138;10744:39;;10726:58;;-1:-1:-1;;;;;34308:20:49;::::1;::::0;::::1;::::0;10714:2:138;10699:18;34308:20:49::1;;;;;;;34005:330;;;34000:3;;;;:::i;:::-;;;33962:373;;;-1:-1:-1::0;;34439:14:49::1;:26:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;33556:914:49:o;811:98:115:-;1941:20;:18;:20::i;:::-;882:22:::1;901:2;882:18;:22::i;28411:657:49:-:0;28507:9;28502:519;28526:18;:25;28522:1;:29;28502:519;;;28566:35;28604:18;28623:1;28604:21;;;;;;;;:::i;:::-;;;;;;;;;;;;28670:344;;;;;;;;;28710:23;;;;28670:344;;;;;;28767:32;;;;28670:344;;;;;;;;28833:32;;;;;28670:344;;;;;;;;28890:23;;;;;28670:344;;;;;;;;;;28942:27;;;;;28670:344;;;;;;;;28988:17;;;;28670:344;;;;;;;;28651:15;;-1:-1:-1;;;;;28634:33:49;-1:-1:-1;28634:33:49;;;:16;:33;;;;;;;:380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28553:3:49;;;:::i;:::-;;;28502:519;;;;29031:32;29044:18;29031:32;;;;;;:::i;16890:540::-;-1:-1:-1;;;;;;;;;;;;17019:1:49;16999:21;;;16995:103;;-1:-1:-1;17037:54:49;;;;;;;;;;17070:19;17037:54;;;17030:61;;16995:103;17128:28;17107:17;17114:9;;17107:17;:::i;:::-;:49;;;17103:83;;17165:21;;;;;;;;;;;;;;17103:83;17386:13;:9;17396:1;17386:9;;:13;:::i;:::-;17375:50;;;;;;;:::i;17877:493::-;18061:27;;;;;;;18099:24;;;18095:77;;;18132:40;;;;;;;;35735:25:138;;;35776:18;;;35769:34;;;35708:18;;18132:40:49;35561:248:138;18095:77:49;18201:27;;;;;;;18182:47;;18178:84;;;18238:24;;;;;;;;;;;;;;18178:84;18297:15;:31;;;;;;18272:57;;18268:97;;;18338:27;;;;;;;;;;;;;;18268:97;17979:391;17877:493;;;:::o;25526:2206::-;25726:27;;25811:12;25726:27;25837:1282;25861:14;25857:1;:18;25837:1282;;;25890:40;25933:12;;25946:1;25933:15;;;;;;;:::i;:::-;;;;;;25890:58;;;;;;;;;;:::i;:::-;26031:17;;-1:-1:-1;;;;;26006:43:49;25956:47;26006:43;;;:24;:43;;;;;;;;;25956:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:17;;25890:58;;-1:-1:-1;25956:93:49;;26153:48;;:20;;26183:17;26153:29;:48;:::i;:::-;26148:105;;26234:17;;26210:43;;;;;-1:-1:-1;;;;;12319:55:138;;;26210:43:49;;;12301:74:138;12274:18;;26210:43:49;12155:226:138;26148:105:49;26482:23;;26262:17;;26482:27;;;26478:533;;26521:18;26578:8;-1:-1:-1;;;;;26557:29:49;:11;:17;;;-1:-1:-1;;;;;26557:29:49;;26553:213;;26628:29;;26682:17;;26613:87;;;;;-1:-1:-1;;;;;12319:55:138;;;26613:87:49;;;12301:74:138;26628:29:49;;;26613:68;;12274:18:138;;26613:87:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26600:100;;26553:213;;;-1:-1:-1;26742:13:49;26553:213;26972:23;;26950:18;;;;26999:3;;26910:85;;;:59;;:39;;;;;:59::i;:::-;:85;;;;:::i;:::-;26909:93;;;;:::i;:::-;26897:105;;26511:500;26478:533;27019:32;27042:9;27019:32;;:::i;:::-;;;27079:17;:33;;;27059:53;;;;;:::i;:::-;;;25882:1237;;;25877:3;;;;:::i;:::-;;;25837:1282;;;;27287:25;27323:14;:37;;;27315:46;;27364:4;27315:53;;;;:::i;:::-;27287:81;;27400:17;27378:19;:39;27374:104;;;27435:17;-1:-1:-1;27427:44:49;;-1:-1:-1;27427:44:49;27374:104;27484:25;27520:14;:37;;;27512:46;;27561:4;27512:53;;;;:::i;:::-;27484:81;;27597:17;27575:19;:39;27571:104;;;27632:17;-1:-1:-1;27624:44:49;;-1:-1:-1;;27624:44:49;27571:104;27681:46;;;25526:2206;;;;;;;;;:::o;1704:646:44:-;1803:7;2315:30;;;2316:15;:8;2327:4;2316:15;:::i;:::-;2315:30;;;;:::i;1715:111:115:-;1787:7;;-1:-1:-1;;;;;1787:7:115;1773:10;:21;1765:56;;;;;;;36406:2:138;1765:56:115;;;36388:21:138;36445:2;36425:18;;;36418:30;36484:24;36464:18;;;36457:52;36526:18;;1765:56:115;36204:346:138;1765:56:115;1715:111::o;21332:947:49:-;21452:9;21447:387;21471:7;:14;21467:1;:18;21447:387;;;21500:13;21516:7;21524:1;21516:10;;;;;;;;:::i;:::-;;;;;;;:16;;;21500:32;;21540:12;21555:7;21563:1;21555:10;;;;;;;;:::i;:::-;;;;;;;:15;;;21540:30;;21584:36;21614:5;21584:20;:29;;:36;;;;:::i;:::-;21579:73;;21629:23;;;;;-1:-1:-1;;;;;12319:55:138;;21629:23:49;;;12301:74:138;12274:18;;21629:23:49;12155:226:138;21579:73:49;-1:-1:-1;;;;;21664:39:49;;:31;:20;21689:5;21664:24;:31::i;:::-;-1:-1:-1;;;;;21664:39:49;;21660:71;;21712:19;;;;;;;;;;;;;;21660:71;21744:34;:20;21772:5;21744:27;:34::i;:::-;21740:88;;;21795:24;;;-1:-1:-1;;;;;36808:15:138;;;36790:34;;36860:15;;36855:2;36840:18;;36833:43;21795:24:49;;36702:18:138;21795:24:49;;;;;;;21740:88;21492:342;;21487:3;;;;:::i;:::-;;;21447:387;;;;21845:9;21840:435;21864:4;:11;21860:1;:15;21840:435;;;21890:13;21906:4;21911:1;21906:7;;;;;;;;:::i;:::-;;;;;;;:13;;;21890:29;;21927:12;21942:4;21947:1;21942:7;;;;;;;;:::i;:::-;;;;;;;:12;;;21927:27;;21984:1;-1:-1:-1;;;;;21967:19:49;:5;-1:-1:-1;;;;;21967:19:49;;:41;;;-1:-1:-1;;;;;;21990:18:49;;;21967:41;21963:78;;;22017:24;;;;;;;;;;;;;;21963:78;22076:4;-1:-1:-1;;;;;22070:20:49;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22053:40:49;:5;-1:-1:-1;;;;;22053:40:49;;22049:72;;22102:19;;;;;;;;;;;;;;22049:72;22134:37;:20;22159:5;22166:4;22134:24;:37::i;:::-;22130:139;;;22188:22;;;-1:-1:-1;;;;;36808:15:138;;;36790:34;;36860:15;;36855:2;36840:18;;36833:43;22188:22:49;;36702:18:138;22188:22:49;;;;;;;22130:139;;;22242:18;;;;;;;;;;;;;;22130:139;21882:393;;21877:3;;;;:::i;:::-;;;21840:435;;;;21332:947;;:::o;4217:528:43:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4566:99:43;4583:6;:15;;;4566:99;;4600:6;:13;;;4566:99;;4633:6;:18;;;4615:36;;:15;:36;;;;:::i;:::-;4653:6;:11;;;4566:99;;:16;:99::i;:::-;4535:136;;;;-1:-1:-1;4677:44:43;4705:15;4677:44;:18;;;:44;4535:6;4217:528::o;35408:227:49:-;35614:14;;35551:44;;;;;35589:4;35551:44;;;12301:74:138;35463:6:49;;35614:14;;;35558:11;-1:-1:-1;;;;;35551:29:49;;;;12274:18:138;;35551:44:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35544:86;;;;:::i;759:169:131:-;864:58;;;-1:-1:-1;;;;;37690:55:138;;864:58:131;;;37672:74:138;37762:18;;;;37755:34;;;864:58:131;;;;;;;;;;37645:18:138;;;;864:58:131;;;;;;;;;;887:23;864:58;;;837:86;;857:5;;837:19;:86::i;37314:501:49:-;37415:9;37410:179;37434:7;:14;37430:1;:18;37410:179;;;37463:16;37482:7;37490:1;37482:10;;;;;;;;:::i;:::-;;;;;;;37463:29;;37504:28;37523:8;37504:11;:18;;:28;;;;:::i;:::-;37500:83;;;37549:25;;-1:-1:-1;;;;;12319:55:138;;12301:74;;37549:25:49;;12289:2:138;12274:18;37549:25:49;;;;;;;37500:83;-1:-1:-1;37450:3:49;;;:::i;:::-;;;37410:179;;;;37599:9;37594:217;37618:4;:11;37614:1;:15;37594:217;;;37644:13;37660:4;37665:1;37660:7;;;;;;;;:::i;:::-;;;;;;;37644:23;;37696:1;-1:-1:-1;;;;;37679:19:49;:5;-1:-1:-1;;;;;37679:19:49;;37675:52;;37710:8;;;37675:52;37738:22;:11;37754:5;37738:15;:22::i;:::-;37734:71;;;37777:19;;-1:-1:-1;;;;;12319:55:138;;12301:74;;37777:19:49;;12289:2:138;12274:18;37777:19:49;;;;;;;37734:71;37636:175;37594:217;37631:3;;;:::i;:::-;;;37594:217;;934:153:117;1021:4;1040:42;:3;-1:-1:-1;;;;;1060:21:117;;1040:19;:42::i;1953:146::-;2035:7;2057:37;:3;-1:-1:-1;;;;;2072:21:117;;2057:14;:37::i;19593:618:49:-;19749:27;;;;-1:-1:-1;;;;;19749:41:49;19745:69;;19799:15;;;;;;;;;;;;;;19745:69;19821:31;;:15;:31;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19821:31:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19881:298;;;;;;;19915:11;19881:298;;;;19951:15;19881:298;;;;;;;;;19995:19;19881:298;;;;;;20043:19;19881:298;;;;;;;;20089:17;19881:298;;;;;;;;;20128:12;19881:298;;;;;;20160:10;19881:298;;;;;;;;;;19864:342;;;;;19821:31;;19864:342;:::i;31712:1526::-;31806:21;;8892:2;31837:33;;31833:59;;;31879:13;;;;;;;;;;;;;;31833:59;32085:17;;;;;;;:21;;;;:60;;-1:-1:-1;32128:17:49;;;;;;;32110:14;;;;:35;;32085:60;32081:90;;;32155:9;:7;:9::i;:::-;32256;32268:15;:6;:13;:15::i;:::-;32256:27;;32251:121;32285:5;;32251:121;;32306:11;32323:16;32333:5;32337:1;32333;:5;:::i;:::-;32323:6;;:9;:16::i;:::-;-1:-1:-1;32305:34:49;-1:-1:-1;32347:18:49;:6;32305:34;32347:13;:18::i;:::-;;32297:75;32292:3;;;;:::i;:::-;;;32251:121;;;;32393:22;32624:9;32619:523;32643:12;32639:1;:16;32619:523;;;32906:11;32920:14;32935:1;32920:17;;;;;;;;:::i;:::-;;;;;;;:21;;;32906:35;;32949:13;32965:14;32980:1;32965:17;;;;;;;;:::i;:::-;;;;;;;:24;;;32949:40;;33008:11;-1:-1:-1;;;;;33001:18:49;:3;-1:-1:-1;;;;;33001:18:49;;:39;;;-1:-1:-1;;;;;;33023:17:49;;;33001:39;32997:74;;;33049:22;;;;;-1:-1:-1;;;;;12319:55:138;;33049:22:49;;;12301:74:138;12274:18;;33049:22:49;12155:226:138;32997:74:49;33079:23;:6;33090:3;33079:23;;;:10;:23::i;:::-;-1:-1:-1;33110:25:49;;;;;;:::i;:::-;;;32662:480;;32657:3;;;;:::i;:::-;;;32619:523;;;-1:-1:-1;33147:17:49;:35;;;;;;;;;;;;33193:40;;;;;;33147:35;;33218:14;;33193:40;:::i;:::-;;;;;;;;31777:1461;;31712:1526;:::o;9627:268:137:-;9690:16;9714:22;9739:19;9747:3;9739:7;:19::i;8294:159::-;-1:-1:-1;;;;;8423:23:137;;8374:4;4067:19;;;:12;;;:19;;;;;;:24;;8393:55;3975:121;1612:699:20;1752:19;;1727:22;;1801:458;1825:14;1821:1;:18;1801:458;;;2006:21;2030:13;-1:-1:-1;;;;;2030:27:20;;2058:12;2071:1;2058:15;;;;;;;;:::i;:::-;;;;;;;;;;;:21;2030:50;;;;;;;;;;-1:-1:-1;;;;;12319:55:138;;;2030:50:20;;;12301:74:138;12274:18;;2030:50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;-1:-1:-1;2098:18:20;;;2030:56;2098:18;2094:75;;2147:12;2160:1;2147:15;;;;;;;;:::i;:::-;;;;;;;;;;;:21;2125:44;;;;;-1:-1:-1;;;;;12319:55:138;;;2125:44:20;;;12301:74:138;12274:18;;2125:44:20;12155:226:138;2094:75:20;2186:66;2229:12;2242:1;2229:15;;;;;;;;:::i;:::-;;;;;;;:22;;;2186:13;:42;;;;:66;;;;:::i;:::-;2177:75;;;;:::i;:::-;;;1846:413;1841:3;;;;:::i;:::-;;;1801:458;;;-1:-1:-1;2265:41:20;:13;2288:5;2303:1;2265:22;:41::i;2121:575:41:-;2213:7;237:66:42;2282:38:41;;2332:12;2356:8;:23;;;2391:8;:14;;;2417:8;:15;;;2444:8;:17;;;2483:8;:13;;;2473:24;;;;;;2530:8;:21;;;2519:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;2509:44;;;;;;2565:8;:17;;;2594:8;:15;;;2621:8;:17;;;2650:8;:23;;;2260:423;;;;;;;;;;;;;;;;;;40109:25:138;;;40165:2;40150:18;;40143:34;;;;40196:18;40250:15;;;40245:2;40230:18;;40223:43;40302:15;;;;40297:2;40282:18;;40275:43;-1:-1:-1;;;;;40416:15:138;;;40410:3;40395:19;;40388:44;40469:15;;;40463:3;40448:19;;40441:44;40516:3;40501:19;;40494:35;;;;40560:3;40545:19;;40538:35;40604:3;40589:19;;40582:35;40661:14;;40654:22;40648:3;40633:19;;40626:51;40714:16;40708:3;40693:19;;40686:45;40762:3;40747:19;;40740:36;40096:3;40081:19;;39662:1120;2260:423:41;;;;;;;;;;;;;2241:450;;;;;;2228:463;;2121:575;;;;:::o;11864:114:136:-;11933:7;11955:18;11962:3;11955:6;:18::i;12295:222::-;12375:7;;;;12430:21;12433:3;12445:5;12430:2;:21::i;:::-;12399:52;;-1:-1:-1;12399:52:136;-1:-1:-1;;;12295:222:136;;;;;;:::o;4867:700:43:-;5122:20;;5085:16;;5104:38;;5122:20;;;;;5104:15;:38;:::i;:::-;5085:57;-1:-1:-1;5152:13:43;;5148:193;;5218:17;;;;5237:15;;5201:77;;5218:17;;;;;5237:15;;;5254:8;;5264:13;;;;;5201:16;:77::i;:::-;5175:104;;;;;;;5288:46;;;;;;5318:15;5288:46;;;;;;5148:193;5378:15;;;;5395;;5373:38;;;;;;;5395:15;5373:4;:38::i;:::-;5347:65;;5439:16;;5418:37;;;;;;;;5347:65;;;;5418:37;;;;5481:15;;;;5518:11;;;;;5502:27;;;;5461:35;;;;5502:27;5347:65;5461:17;;5502:27;5541:21;;;;;5439:6;;41015:13:138;;41008:21;41001:29;40983:48;;41078:4;41066:17;;;41060:24;41103:34;41175:21;;;41153:20;;;41146:51;;;;41257:4;41245:17;;;41239:24;41235:33;41213:20;;;41206:63;;;;40971:2;40956:18;;40787:488;1183:118:117;1255:7;1277:19;:3;:17;:19::i;1397:206::-;1480:7;;;;1535:20;:3;1549:5;1535:13;:20::i;29684:506:49:-;29804:9;29799:323;29823:26;:33;29819:1;:37;29799:323;;;29871:43;29917:26;29944:1;29917:29;;;;;;;;:::i;:::-;;;;;;;;;;;;29999:116;;;;;;;;30039:15;;;;29999:116;;;;;;30081:25;;;;29999:116;;;;;;;;;;29980:15;;-1:-1:-1;;;;;29955:41:49;-1:-1:-1;29955:41:49;;;:24;:41;;;;;;;:160;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29858:3:49;;;:::i;:::-;;;29799:323;;;;30132:53;30158:26;30132:53;;;;;;:::i;11629:160:136:-;11713:4;11732:52;11741:3;-1:-1:-1;;;;;11761:21:136;;11732:8;:52::i;1482:188:115:-;1550:10;-1:-1:-1;;;;;1544:16:115;;;1536:52;;;;;;;42449:2:138;1536:52:115;;;42431:21:138;42488:2;42468:18;;;42461:30;42527:25;42507:18;;;42500:53;42570:18;;1536:52:115;42247:347:138;1536:52:115;1595:14;:19;;;;-1:-1:-1;;;;;1595:19:115;;;;;;;;;-1:-1:-1;1653:7:115;;1626:39;;1595:19;;1653:7;;1626:39;;-1:-1:-1;1626:39:115;1482:188;:::o;683:684:44:-;785:7;1358:4;1330:24;1343:11;1330:24;;;;:::i;694:144:117:-;774:4;793:40;:3;-1:-1:-1;;;;;811:21:117;;793:17;:40::i;438:160::-;530:4;549:44;:3;-1:-1:-1;;;;;564:21:117;;587:5;549:14;:44::i;:::-;542:51;438:160;-1:-1:-1;;;;438:160:117:o;5837:201:43:-;5971:7;5993:40;5998:8;6017:15;6028:4;6017:8;:15;:::i;:::-;6008:24;;:6;:24;:::i;:::-;5993:4;:40::i;:::-;5986:47;5837:201;-1:-1:-1;;;;;5837:201:43:o;3401:668:131:-;3804:23;3830:69;3858:4;3830:69;;;;;;;;;;;;;;;;;3838:5;-1:-1:-1;;;;;3830:27:131;;;:69;;;;;:::i;:::-;3909:17;;3804:95;;-1:-1:-1;3909:21:131;3905:160;;3992:10;3981:30;;;;;;;;;;;;:::i;:::-;3973:85;;;;;;;42801:2:138;3973:85:131;;;42783:21:138;42840:2;42820:18;;;42813:30;42879:34;42859:18;;;42852:62;42950:12;42930:18;;;42923:40;42980:19;;3973:85:131;42599:406:138;8071:150:137;8144:4;8163:53;8171:3;-1:-1:-1;;;;;8191:23:137;;8163:7;:53::i;7773:144::-;7843:4;7862:50;7867:3;-1:-1:-1;;;;;7887:23:137;;7862:4;:50::i;8757:142:136:-;8841:4;8860:34;8869:3;8889;8860:8;:34::i;10121:162::-;10200:7;10246:29;10250:3;10270;10246;:29::i;11407:151::-;11484:4;11503:50;11510:3;-1:-1:-1;;;;;11530:21:136;;11503:6;:50::i;11068:192::-;11173:4;11192:63;11196:3;-1:-1:-1;;;;;11216:21:136;;11248:5;11192:3;:63::i;5224:103:137:-;5280:16;5311:3;:11;;5304:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5224:103;;;:::o;2304:1790:43:-;2522:18;;;;;;;2521:19;;:41;;-1:-1:-1;2544:18:43;;2521:41;2517:68;;;2304:1790;;;:::o;2517:68::-;2608:15;;;2648:17;;;2608:15;;;;;2648:17;;;2591:14;;2690:38;;2708:20;;;;;2690:15;:38;:::i;:::-;2671:57;-1:-1:-1;2739:13:43;;2735:271;;2775:8;2766:6;:17;2762:48;;;2792:18;;;;;;;;;;;;;;2762:48;2930:13;;;;2885:59;;2902:8;;2912:6;;2920:8;;2930:13;;;;;2885:16;:59::i;:::-;2953:46;;;;;2983:15;2953:46;;;;;;2876:68;-1:-1:-1;2735:271:43;3027:13;3016:8;:24;3012:302;;;-1:-1:-1;;;;;3136:26:43;;3132:97;;3171:58;;;;;;;;35735:25:138;;;35776:18;;;35769:34;;;35708:18;;3171:58:43;35561:248:138;3132:97:43;3244:63;;;;;;;;43212:25:138;;;43253:18;;;43246:34;;;-1:-1:-1;;;;;43316:55:138;;43296:18;;;43289:83;43185:18;;3244:63:43;43010:368:138;3012:302:43;3332:13;3323:6;:22;3319:594;;;3370:13;;;;;;;;;;;3355:12;;3370:13;;3709:8;;3370:13;3709:8;:::i;:::-;3682:22;3698:6;3682:13;:22;:::i;:::-;3681:37;;;;:::i;:::-;3680:46;;;;:::i;:::-;3653:73;-1:-1:-1;;;;;;3739:26:43;;3735:95;;3774:56;;;;;;;;35735:25:138;;;35776:18;;;35769:34;;;35708:18;;3774:56:43;35561:248:138;3735:95:43;3845:61;;;;;;;;43212:25:138;;;43253:18;;;43246:34;;;-1:-1:-1;;;;;43316:55:138;;43296:18;;;43289:83;43185:18;;3845:61:43;43010:368:138;3319:594:43;3918:23;3928:13;3918:23;;:::i;:::-;4016:33;;;;;;;;;;4060:29;;7429:25:138;;;4016:33:43;;-1:-1:-1;4060:29:43;;7417:2:138;7402:18;4060:29:43;;;;;;;2406:1688;;;2304:1790;;;:::o;3262:117:136:-;3334:7;3356:18;:3;:16;:18::i;3710:181::-;3793:7;;;3831:19;:3;3844:5;3831:12;:19::i;:::-;3869:16;;;;:11;;;;;:16;;;;;;;;;3710:181;-1:-1:-1;;;;3710:181:136:o;6166:99:43:-;6225:7;6251:1;6247;:5;:13;;6259:1;6247:13;;;-1:-1:-1;6255:1:43;;6166:99;-1:-1:-1;6166:99:43:o;3046:134:136:-;3133:4;3152:23;:3;3171;3152:18;:23::i;8553:133::-;8630:4;8649:32;8656:3;8676;8649:6;:32::i;8214:192::-;8319:4;8338:63;8342:3;8362;-1:-1:-1;;;;;8376:23:136;;8338:3;:63::i;3695:187:132:-;3798:12;3825:52;3847:6;3855:4;3861:1;3864:12;3825:21;:52::i;2660:1242:137:-;2726:4;2855:19;;;:12;;;:19;;;;;;2885:15;;2881:1017;;3224:21;3248:14;3261:1;3248:10;:14;:::i;:::-;3290:18;;3224:38;;-1:-1:-1;3270:17:137;;3290:22;;3311:1;;3290:22;:::i;:::-;3270:42;;3338:13;3325:9;:26;3321:352;;3363:17;3383:3;:11;;3395:9;3383:22;;;;;;;;:::i;:::-;;;;;;;;;3363:42;;3518:9;3489:3;:11;;3501:13;3489:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3585:23;;;:12;;;:23;;;;;:36;;;3321:352;3739:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3819:3;:12;;:19;3832:5;3819:19;;;;;;;;;;;3812:26;;;3854:4;3847:11;;;;;;;2881:1017;3886:5;3879:12;;;;;2881:1017;2732:1170;2660:1242;;;;:::o;2152:354::-;2215:4;4067:19;;;:12;;;:19;;;;;;2227:275;;-1:-1:-1;2263:23:137;;;;;;;;:11;:23;;;;;;;;;;;;;2425:18;;2403:19;;;:12;;;:19;;;;;;:40;;;;2451:11;;2227:275;-1:-1:-1;2490:5:137;2483:12;;4425:233:136;4507:7;4538:16;;;:11;;;:16;;;;;;4568:10;;;;:32;;;4582:18;4591:3;4596;4582:8;:18::i;:::-;4560:75;;;;;;;43774:2:138;4560:75:136;;;43756:21:138;43813:2;43793:18;;;43786:30;43852:32;43832:18;;;43825:60;43902:18;;4560:75:136;43572:354:138;2821:154:136;2901:4;2920:16;;;:11;;;:16;;;;;2913:23;;;2949:21;2920:3;2932;2949:16;:21::i;2485:180::-;2593:4;2605:16;;;:11;;;:16;;;;;:24;;;2642:18;2605:3;2617;2642:13;:18::i;6215:109:137:-;6278:7;6300:19;6308:3;4247:18;;4169:101;6644:123;6718:7;6740:22;6744:3;6756:5;6740:3;:22::i;6010:132::-;6090:4;4067:19;;;:12;;;:19;;;;;;:24;;6109:28;3975:121;4672:414:132;4819:12;4872:5;4847:21;:30;;4839:81;;;;;;;44133:2:138;4839:81:132;;;44115:21:138;44172:2;44152:18;;;44145:30;44211:34;44191:18;;;44184:62;44282:8;44262:18;;;44255:36;44308:19;;4839:81:132;43931:402:138;4839:81:132;4927:12;4941:23;4968:6;-1:-1:-1;;;;;4968:11:132;4987:5;4994:4;4968:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4926:73;;;;5012:69;5039:6;5047:7;5056:10;5068:12;5012:26;:69::i;:::-;5005:76;4672:414;-1:-1:-1;;;;;;;4672:414:132:o;5814:123:137:-;5887:4;5906:26;5914:3;5926:5;5906:7;:26::i;5543:117::-;5613:4;5632:23;5637:3;5649:5;5632:4;:23::i;4590:112::-;4657:7;4679:3;:11;;4691:5;4679:18;;;;;;;;:::i;:::-;;;;;;;;;4672:25;;4590:112;;;;:::o;7016:548:132:-;7178:12;7202:7;7198:362;;;7223:10;:17;7244:1;7223:22;7219:256;;-1:-1:-1;;;;;1395:19:132;;;7406:60;;;;;;;44832:2:138;7406:60:132;;;44814:21:138;44871:2;44851:18;;;44844:30;44910:31;44890:18;;;44883:59;44959:18;;7406:60:132;44630:353:138;7406:60:132;-1:-1:-1;7489:10:132;7482:17;;7198:362;7520:33;7528:10;7540:12;8181:17;;:21;8177:325;;8383:10;8377:17;8431:15;8418:10;8414:2;8410:19;8403:44;8177:325;8482:12;8475:20;;;;;;;;;;;:::i;917:264:138:-;1113:3;1098:19;;1126:49;1102:9;1157:6;-1:-1:-1;;;;;410:2:138;402:5;396:12;392:21;387:3;380:34;460:4;453:5;449:16;443:23;485:18;553:2;539:12;535:21;528:4;523:3;519:14;512:45;618:2;610:4;603:5;599:16;593:23;589:32;582:4;577:3;573:14;566:56;683:2;675:4;668:5;664:16;658:23;654:32;647:4;642:3;638:14;631:56;;;748:26;740:4;733:5;729:16;723:23;719:56;712:4;707:3;703:14;696:80;837:2;829:4;822:5;818:16;812:23;808:32;801:4;796:3;792:14;785:56;902:2;894:4;887:5;883:16;877:23;873:32;866:4;861:3;857:14;850:56;;253:659;;;1186:154;-1:-1:-1;;;;;1265:5:138;1261:54;1254:5;1251:65;1241:93;;1330:1;1327;1320:12;1345:247;1404:6;1457:2;1445:9;1436:7;1432:23;1428:32;1425:52;;;1473:1;1470;1463:12;1425:52;1512:9;1499:23;1531:31;1556:5;1531:31;:::i;1961:250::-;2046:1;2056:113;2070:6;2067:1;2064:13;2056:113;;;2146:11;;;2140:18;2127:11;;;2120:39;2092:2;2085:10;2056:113;;;-1:-1:-1;;2203:1:138;2185:16;;2178:27;1961:250::o;2216:330::-;2258:3;2296:5;2290:12;2323:6;2318:3;2311:19;2339:76;2408:6;2401:4;2396:3;2392:14;2385:4;2378:5;2374:16;2339:76;:::i;:::-;2460:2;2448:15;2465:66;2444:88;2435:98;;;;2535:4;2431:109;;2216:330;-1:-1:-1;;2216:330:138:o;2551:220::-;2700:2;2689:9;2682:21;2663:4;2720:45;2761:2;2750:9;2746:18;2738:6;2720:45;:::i;2776:184::-;2828:77;2825:1;2818:88;2925:4;2922:1;2915:15;2949:4;2946:1;2939:15;2965:253;3037:2;3031:9;3079:4;3067:17;;3114:18;3099:34;;3135:22;;;3096:62;3093:88;;;3161:18;;:::i;:::-;3197:2;3190:22;2965:253;:::o;3223:257::-;3295:4;3289:11;;;3327:17;;3374:18;3359:34;;3395:22;;;3356:62;3353:88;;;3421:18;;:::i;3485:251::-;3557:2;3551:9;3599:2;3587:15;;3632:18;3617:34;;3653:22;;;3614:62;3611:88;;;3679:18;;:::i;3741:334::-;3812:2;3806:9;3868:2;3858:13;;3873:66;3854:86;3842:99;;3971:18;3956:34;;3992:22;;;3953:62;3950:88;;;4018:18;;:::i;:::-;4054:2;4047:22;3741:334;;-1:-1:-1;3741:334:138:o;4080:201::-;4158:4;4191:18;4183:6;4180:30;4177:56;;;4213:18;;:::i;:::-;-1:-1:-1;4258:1:138;4254:14;4270:4;4250:25;;4080:201::o;4286:163::-;4353:20;;4413:10;4402:22;;4392:33;;4382:61;;4439:1;4436;4429:12;4382:61;4286:163;;;:::o;4454:129::-;4539:18;4532:5;4528:30;4521:5;4518:41;4508:69;;4573:1;4570;4563:12;4588:118;4674:5;4667:13;4660:21;4653:5;4650:32;4640:60;;4696:1;4693;4686:12;4711:2023;4832:6;4863:2;4906;4894:9;4885:7;4881:23;4877:32;4874:52;;;4922:1;4919;4912:12;4874:52;4962:9;4949:23;4995:18;4987:6;4984:30;4981:50;;;5027:1;5024;5017:12;4981:50;5050:22;;5103:4;5095:13;;5091:27;-1:-1:-1;5081:55:138;;5132:1;5129;5122:12;5081:55;5168:2;5155:16;5191:78;5207:61;5265:2;5207:61;:::i;:::-;5191:78;:::i;:::-;5303:15;;;5365:4;5404:11;;;5396:20;;5392:29;;;5334:12;;;;5291:3;5433:19;;;5430:39;;;5465:1;5462;5455:12;5430:39;5489:11;;;;5509:1195;5525:6;5520:3;5517:15;5509:1195;;;5605:2;5599:3;5590:7;5586:17;5582:26;5579:116;;;5649:1;5678:2;5674;5667:14;5579:116;5721:22;;:::i;:::-;5784:3;5771:17;5801:33;5826:7;5801:33;:::i;:::-;5847:22;;5905:31;5923:12;;;5905:31;:::i;:::-;5900:2;5893:5;5889:14;5882:55;5960:2;5998:31;6025:2;6020:3;6016:12;5998:31;:::i;:::-;5982:14;;;5975:55;6053:2;6091:31;6109:12;;;6091:31;:::i;:::-;6075:14;;;6068:55;6146:3;6190:12;;;6177:26;6216:32;6177:26;6216:32;:::i;:::-;6268:14;;;6261:31;6315:3;6359:12;;;6346:26;6385:32;6346:26;6385:32;:::i;:::-;6437:14;;;6430:31;6485:3;6529:13;;;6516:27;6556:30;6516:27;6556:30;:::i;:::-;6606:15;;;6599:32;6644:18;;5542:12;;;;6682;;;;5509:1195;;;-1:-1:-1;6723:5:138;4711:2023;-1:-1:-1;;;;;;;4711:2023:138:o;6739:163::-;6806:5;6851:3;6842:6;6837:3;6833:16;6829:26;6826:46;;;6868:1;6865;6858:12;6907:371;7001:6;7054:2;7042:9;7033:7;7029:23;7025:32;7022:52;;;7070:1;7067;7060:12;7022:52;7110:9;7097:23;7143:18;7135:6;7132:30;7129:50;;;7175:1;7172;7165:12;7129:50;7198:74;7264:7;7255:6;7244:9;7240:22;7198:74;:::i;7465:1125::-;7529:5;7582:3;7575:4;7567:6;7563:17;7559:27;7549:55;;7600:1;7597;7590:12;7549:55;7636:6;7623:20;7662:4;7686:78;7702:61;7760:2;7702:61;:::i;7686:78::-;7798:15;;;7884:1;7880:10;;;;7868:23;;7864:32;;;7829:12;;;;7908:15;;;7905:35;;;7936:1;7933;7926:12;7905:35;7972:2;7964:6;7960:15;7984:577;8000:6;7995:3;7992:15;7984:577;;;8078:4;8072:3;8067;8063:13;8059:24;8056:114;;;8124:1;8153:2;8149;8142:14;8056:114;8196:22;;:::i;:::-;8259:3;8246:17;8276:33;8301:7;8276:33;:::i;:::-;8322:22;;8385:12;;;8372:26;8411:33;8372:26;8411:33;:::i;:::-;8464:14;;;8457:31;8501:18;;8539:12;;;;8026:4;8017:14;7984:577;;;-1:-1:-1;8579:5:138;7465:1125;-1:-1:-1;;;;;;7465:1125:138:o;8595:673::-;8771:6;8779;8832:2;8820:9;8811:7;8807:23;8803:32;8800:52;;;8848:1;8845;8838:12;8800:52;8888:9;8875:23;8917:18;8958:2;8950:6;8947:14;8944:34;;;8974:1;8971;8964:12;8944:34;8997:71;9060:7;9051:6;9040:9;9036:22;8997:71;:::i;:::-;8987:81;;9121:2;9110:9;9106:18;9093:32;9077:48;;9150:2;9140:8;9137:16;9134:36;;;9166:1;9163;9156:12;9134:36;;9189:73;9254:7;9243:8;9232:9;9228:24;9189:73;:::i;:::-;9179:83;;;8595:673;;;;;:::o;10189:388::-;10257:6;10265;10318:2;10306:9;10297:7;10293:23;10289:32;10286:52;;;10334:1;10331;10324:12;10286:52;10373:9;10360:23;10392:31;10417:5;10392:31;:::i;:::-;10442:5;-1:-1:-1;10499:2:138;10484:18;;10471:32;10512:33;10471:32;10512:33;:::i;:::-;10564:7;10554:17;;;10189:388;;;;;:::o;10795:755::-;10849:5;10902:3;10895:4;10887:6;10883:17;10879:27;10869:55;;10920:1;10917;10910:12;10869:55;10956:6;10943:20;10982:4;11006:78;11022:61;11080:2;11022:61;:::i;11006:78::-;11118:15;;;11204:1;11200:10;;;;11188:23;;11184:32;;;11149:12;;;;11228:15;;;11225:35;;;11256:1;11253;11246:12;11225:35;11292:2;11284:6;11280:15;11304:217;11320:6;11315:3;11312:15;11304:217;;;11400:3;11387:17;11417:31;11442:5;11417:31;:::i;:::-;11461:18;;11499:12;;;;11337;;11304:217;;11555:595;11673:6;11681;11734:2;11722:9;11713:7;11709:23;11705:32;11702:52;;;11750:1;11747;11740:12;11702:52;11790:9;11777:23;11819:18;11860:2;11852:6;11849:14;11846:34;;;11876:1;11873;11866:12;11846:34;11899:61;11952:7;11943:6;11932:9;11928:22;11899:61;:::i;:::-;11889:71;;12013:2;12002:9;11998:18;11985:32;11969:48;;12042:2;12032:8;12029:16;12026:36;;;12058:1;12055;12048:12;12026:36;;12081:63;12136:7;12125:8;12114:9;12110:24;12081:63;:::i;12901:159::-;12968:20;;13028:6;13017:18;;13007:29;;12997:57;;13050:1;13047;13040:12;13065:920;13156:6;13209:3;13197:9;13188:7;13184:23;13180:33;13177:53;;;13226:1;13223;13216:12;13177:53;13252:22;;:::i;:::-;13311:9;13298:23;13330:33;13355:7;13330:33;:::i;:::-;13372:22;;13426:37;13459:2;13444:18;;13426:37;:::i;:::-;13421:2;13414:5;13410:14;13403:61;13496:37;13529:2;13518:9;13514:18;13496:37;:::i;:::-;13491:2;13484:5;13480:14;13473:61;13566:37;13599:2;13588:9;13584:18;13566:37;:::i;:::-;13561:2;13554:5;13550:14;13543:61;13656:3;13645:9;13641:19;13628:33;13670;13695:7;13670:33;:::i;:::-;13730:3;13719:15;;13712:32;13777:38;13810:3;13795:19;;13777:38;:::i;:::-;13771:3;13764:5;13760:15;13753:63;13868:3;13857:9;13853:19;13840:33;13882:32;13906:7;13882:32;:::i;:::-;13941:3;13930:15;;13923:32;13934:5;13065:920;-1:-1:-1;;;13065:920:138:o;14709:267::-;14907:3;14892:19;;14920:50;14896:9;14952:6;-1:-1:-1;;;;;14148:2:138;14140:5;14134:12;14130:21;14125:3;14118:34;14198:4;14191:5;14187:16;14181:23;14223:6;14279:2;14265:12;14261:21;14254:4;14249:3;14245:14;14238:45;14331:4;14324:5;14320:16;14314:23;14292:45;;14356:10;14418:2;14402:14;14398:23;14391:4;14386:3;14382:14;14375:47;14483:2;14475:4;14468:5;14464:16;14458:23;14454:32;14447:4;14442:3;14438:14;14431:56;14548:2;14540:4;14533:5;14529:16;14523:23;14519:32;14512:4;14507:3;14503:14;14496:56;14613:2;14605:4;14598:5;14594:16;14588:23;14584:32;14577:4;14572:3;14568:14;14561:56;;;;;14678:18;14670:4;14663:5;14659:16;14653:23;14649:48;14642:4;14637:3;14633:14;14626:72;13990:714;;;14981:648;15100:6;15108;15161:2;15149:9;15140:7;15136:23;15132:32;15129:52;;;15177:1;15174;15167:12;15129:52;15217:9;15204:23;15246:18;15287:2;15279:6;15276:14;15273:34;;;15303:1;15300;15293:12;15273:34;15341:6;15330:9;15326:22;15316:32;;15386:7;15379:4;15375:2;15371:13;15367:27;15357:55;;15408:1;15405;15398:12;15357:55;15448:2;15435:16;15474:2;15466:6;15463:14;15460:34;;;15490:1;15487;15480:12;15460:34;15543:7;15538:2;15528:6;15525:1;15521:14;15517:2;15513:23;15509:32;15506:45;15503:65;;;15564:1;15561;15554:12;15503:65;15595:2;15587:11;;;;;15617:6;;-1:-1:-1;14981:648:138;;-1:-1:-1;;;;14981:648:138:o;16373:681::-;16544:2;16596:21;;;16666:13;;16569:18;;;16688:22;;;16515:4;;16544:2;16767:15;;;;16741:2;16726:18;;;16515:4;16810:218;16824:6;16821:1;16818:13;16810:218;;;16889:13;;-1:-1:-1;;;;;16885:62:138;16873:75;;17003:15;;;;16968:12;;;;16846:1;16839:9;16810:218;;;-1:-1:-1;17045:3:138;;16373:681;-1:-1:-1;;;;;;16373:681:138:o;17059:574::-;17171:6;17179;17187;17240:2;17228:9;17219:7;17215:23;17211:32;17208:52;;;17256:1;17253;17246:12;17208:52;17296:9;17283:23;17329:18;17321:6;17318:30;17315:50;;;17361:1;17358;17351:12;17315:50;17384:74;17450:7;17441:6;17430:9;17426:22;17384:74;:::i;:::-;17374:84;;;17505:2;17494:9;17490:18;17477:32;17467:42;;17559:2;17548:9;17544:18;17531:32;17572:31;17597:5;17572:31;:::i;:::-;17622:5;17612:15;;;17059:574;;;;;:::o;17820:596::-;17885:3;17923:5;17917:12;17950:6;17945:3;17938:19;17976:4;18005:2;18000:3;17996:12;17989:19;;18042:2;18035:5;18031:14;18063:1;18073:318;18087:6;18084:1;18081:13;18073:318;;;18146:13;;18188:9;;-1:-1:-1;;;;;18184:58:138;18172:71;;18287:11;;18281:18;18301:6;18277:31;18263:12;;;18256:53;18338:4;18329:14;;;;18366:15;;;;18109:1;18102:9;18073:318;;;-1:-1:-1;18407:3:138;;17820:596;-1:-1:-1;;;;;17820:596:138:o;18421:406::-;18690:2;18679:9;18672:21;18653:4;18710:68;18774:2;18763:9;18759:18;18751:6;18710:68;:::i;:::-;18702:76;;18814:6;18809:2;18798:9;18794:18;18787:34;18421:406;;;;;:::o;18832:188::-;18900:20;;18960:34;18949:46;;18939:57;;18929:85;;19010:1;19007;19000:12;19025:490;19109:6;19162:2;19150:9;19141:7;19137:23;19133:32;19130:52;;;19178:1;19175;19168:12;19130:52;19204:22;;:::i;:::-;19263:9;19250:23;19282:30;19304:7;19282:30;:::i;:::-;19321:22;;19375:38;19409:2;19394:18;;19375:38;:::i;:::-;19370:2;19363:5;19359:14;19352:62;19446:38;19480:2;19469:9;19465:18;19446:38;:::i;:::-;19441:2;19430:14;;19423:62;19434:5;19025:490;-1:-1:-1;;;19025:490:138:o;19892:1430::-;20021:6;20052:2;20095;20083:9;20074:7;20070:23;20066:32;20063:52;;;20111:1;20108;20101:12;20063:52;20151:9;20138:23;20184:18;20176:6;20173:30;20170:50;;;20216:1;20213;20206:12;20170:50;20239:22;;20292:4;20284:13;;20280:27;-1:-1:-1;20270:55:138;;20321:1;20318;20311:12;20270:55;20357:2;20344:16;20380:78;20396:61;20454:2;20396:61;:::i;20380:78::-;20492:15;;;20554:4;20593:11;;;20585:20;;20581:29;;;20523:12;;;;20480:3;20622:19;;;20619:39;;;20654:1;20651;20644:12;20619:39;20678:11;;;;20698:594;20714:6;20709:3;20706:15;20698:594;;;20794:2;20788:3;20779:7;20775:17;20771:26;20768:116;;;20838:1;20867:2;20863;20856:14;20768:116;20910:22;;:::i;:::-;20973:3;20960:17;20990:33;21015:7;20990:33;:::i;:::-;21036:22;;21094:31;21112:12;;;21094:31;:::i;:::-;21089:2;21082:5;21078:14;21071:55;21149:2;21187:31;21214:2;21209:3;21205:12;21187:31;:::i;:::-;21171:14;;;21164:55;21232:18;;20731:12;;;;21270;;;;20698:594;;21327:241;21383:6;21436:2;21424:9;21415:7;21411:23;21407:32;21404:52;;;21452:1;21449;21442:12;21404:52;21491:9;21478:23;21510:28;21532:5;21510:28;:::i;21573:580::-;21650:4;21656:6;21716:11;21703:25;21806:66;21795:8;21779:14;21775:29;21771:102;21751:18;21747:127;21737:155;;21888:1;21885;21878:12;21737:155;21915:33;;21967:20;;;-1:-1:-1;22010:18:138;21999:30;;21996:50;;;22042:1;22039;22032:12;21996:50;22075:4;22063:17;;-1:-1:-1;22106:14:138;22102:27;;;22092:38;;22089:58;;;22143:1;22140;22133:12;22158:639;22286:4;22292:6;22352:11;22339:25;22442:66;22431:8;22415:14;22411:29;22407:102;22387:18;22383:127;22373:155;;22524:1;22521;22514:12;22373:155;22551:33;;22603:20;;;-1:-1:-1;22646:18:138;22635:30;;22632:50;;;22678:1;22675;22668:12;22632:50;22711:4;22699:17;;-1:-1:-1;22762:1:138;22758:14;;;22742;22738:35;22728:46;;22725:66;;;22787:1;22784;22777:12;23127:208;23206:13;;23259:50;23248:62;;23238:73;;23228:101;;23325:1;23322;23315:12;23340:293;23419:6;23427;23480:2;23468:9;23459:7;23455:23;23451:32;23448:52;;;23496:1;23493;23486:12;23448:52;23519:40;23549:9;23519:40;:::i;:::-;23509:50;;23578:49;23623:2;23612:9;23608:18;23578:49;:::i;:::-;23568:59;;23340:293;;;;;:::o;23638:184::-;23690:77;23687:1;23680:88;23787:4;23784:1;23777:15;23811:4;23808:1;23801:15;23827:168;23900:9;;;23931;;23948:15;;;23942:22;;23928:37;23918:71;;23969:18;;:::i;24000:125::-;24065:9;;;24086:10;;;24083:36;;;24099:18;;:::i;24130:274::-;24170:1;24196;24186:189;;24231:77;24228:1;24221:88;24332:4;24329:1;24322:15;24360:4;24357:1;24350:15;24186:189;-1:-1:-1;24389:9:138;;24130:274::o;24409:180::-;24476:18;24514:10;;;24526;;;24510:27;;24549:11;;;24546:37;;;24563:18;;:::i;24594:184::-;24664:6;24717:2;24705:9;24696:7;24692:23;24688:32;24685:52;;;24733:1;24730;24723:12;24685:52;-1:-1:-1;24756:16:138;;24594:184;-1:-1:-1;24594:184:138:o;25031:427::-;25121:6;25174:2;25162:9;25153:7;25149:23;25145:32;25142:52;;;25190:1;25187;25180:12;25142:52;25216:22;;:::i;:::-;25275:9;25262:23;25294:33;25319:7;25294:33;:::i;:::-;25336:22;;25390:37;25423:2;25408:18;;25390:37;:::i;:::-;25385:2;25374:14;;25367:61;25378:5;25031:427;-1:-1:-1;;;25031:427:138:o;25814:249::-;25883:6;25936:2;25924:9;25915:7;25911:23;25907:32;25904:52;;;25952:1;25949;25942:12;25904:52;25984:9;25978:16;26003:30;26027:5;26003:30;:::i;26068:245::-;26135:6;26188:2;26176:9;26167:7;26163:23;26159:32;26156:52;;;26204:1;26201;26194:12;26156:52;26236:9;26230:16;26255:28;26277:5;26255:28;:::i;26318:325::-;26406:6;26401:3;26394:19;26458:6;26451:5;26444:4;26439:3;26435:14;26422:43;;26510:1;26503:4;26494:6;26489:3;26485:16;26481:27;26474:38;26376:3;26632:4;26562:66;26557:2;26549:6;26545:15;26541:88;26536:3;26532:98;26528:109;26521:116;;26318:325;;;;:::o;26648:244::-;26805:2;26794:9;26787:21;26768:4;26825:61;26882:2;26871:9;26867:18;26859:6;26851;26825:61;:::i;26897:180::-;26956:6;27009:2;26997:9;26988:7;26984:23;26980:32;26977:52;;;27025:1;27022;27015:12;26977:52;-1:-1:-1;27048:23:138;;26897:180;-1:-1:-1;26897:180:138:o;27082:424::-;27174:6;27227:2;27215:9;27206:7;27202:23;27198:32;27195:52;;;27243:1;27240;27233:12;27195:52;27269:22;;:::i;:::-;27328:9;27315:23;27347:33;27372:7;27347:33;:::i;:::-;27389:22;;27471:2;27456:18;;;27443:32;27427:14;;;27420:56;;;;-1:-1:-1;27396:5:138;27082:424;-1:-1:-1;27082:424:138:o;27511:188::-;27578:26;27624:10;;;27636;;;27620:27;;27659:11;;;27656:37;;;27673:18;;:::i;28107:209::-;28145:3;28173:18;28226:2;28219:5;28215:14;28253:2;28244:7;28241:15;28238:41;;28259:18;;:::i;:::-;28308:1;28295:15;;28107:209;-1:-1:-1;;;28107:209:138:o;28321:184::-;28373:77;28370:1;28363:88;28470:4;28467:1;28460:15;28494:4;28491:1;28484:15;28510:693;-1:-1:-1;;;;;28799:6:138;28795:55;28784:9;28777:74;28887:3;28882:2;28871:9;28867:18;28860:31;28758:4;28914:62;28971:3;28960:9;28956:19;28948:6;28940;28914:62;:::i;:::-;29012:6;29007:2;28996:9;28992:18;28985:34;29067:18;29059:6;29055:31;29050:2;29039:9;29035:18;29028:59;29136:9;29128:6;29124:22;29118:3;29107:9;29103:19;29096:51;29164:33;29190:6;29182;29164:33;:::i;29208:777::-;29287:6;29340:2;29328:9;29319:7;29315:23;29311:32;29308:52;;;29356:1;29353;29346:12;29308:52;29389:9;29383:16;29418:18;29459:2;29451:6;29448:14;29445:34;;;29475:1;29472;29465:12;29445:34;29513:6;29502:9;29498:22;29488:32;;29558:7;29551:4;29547:2;29543:13;29539:27;29529:55;;29580:1;29577;29570:12;29529:55;29609:2;29603:9;29631:2;29627;29624:10;29621:36;;;29637:18;;:::i;:::-;29679:112;29787:2;29718:66;29711:4;29707:2;29703:13;29699:86;29695:95;29679:112;:::i;:::-;29666:125;;29814:2;29807:5;29800:17;29854:7;29849:2;29844;29840;29836:11;29832:20;29829:33;29826:53;;;29875:1;29872;29865:12;29826:53;29888:67;29952:2;29947;29940:5;29936:14;29931:2;29927;29923:11;29888:67;:::i;:::-;-1:-1:-1;29974:5:138;29208:777;-1:-1:-1;;;;29208:777:138:o;29990:195::-;30029:3;30060:66;30053:5;30050:77;30047:103;;30130:18;;:::i;:::-;-1:-1:-1;30177:1:138;30166:13;;29990:195::o;30190:585::-;30257:3;30295:5;30289:12;30322:6;30317:3;30310:19;30348:4;30377:2;30372:3;30368:12;30361:19;;30414:2;30407:5;30403:14;30435:1;30445:305;30459:6;30456:1;30453:13;30445:305;;;30518:13;;30560:9;;-1:-1:-1;;;;;30556:58:138;30544:71;;30655:11;;30649:18;30635:12;;;30628:40;30697:4;30688:14;;;;30725:15;;;;30481:1;30474:9;30445:305;;30780:1716;30975:2;30964:9;30957:21;30987:52;31035:2;31024:9;31020:18;31011:6;31005:13;222:18;211:30;199:43;;146:102;30987:52;30938:4;31086:2;31078:6;31074:15;31068:22;31099:51;31146:2;31135:9;31131:18;31117:12;222:18;211:30;199:43;;146:102;31099:51;;31204:2;31196:6;31192:15;31186:22;31181:2;31170:9;31166:18;31159:50;31258:2;31250:6;31246:15;31240:22;31271:55;31321:3;31310:9;31306:19;31290:14;-1:-1:-1;;;;;80:54:138;68:67;;14:127;31271:55;-1:-1:-1;31375:3:138;31363:16;;31357:23;222:18;211:30;;31438:3;31423:19;;199:43;31389:54;31498:3;31490:6;31486:16;31480:23;31474:3;31463:9;31459:19;31452:52;31553:3;31545:6;31541:16;31535:23;31567:52;31614:3;31603:9;31599:19;31583:14;9548:13;9541:21;9529:34;;9478:91;31567:52;;31668:3;31660:6;31656:16;31650:23;31692:3;31704:54;31754:2;31743:9;31739:18;31723:14;-1:-1:-1;;;;;80:54:138;68:67;;14:127;31704:54;31807:2;31799:6;31795:15;31789:22;31767:44;;;31830:6;31855:3;31894:2;31889;31878:9;31874:18;31867:30;31920:54;31969:3;31958:9;31954:19;31938:14;31920:54;:::i;:::-;31906:68;;32023:2;32015:6;32011:15;32005:22;31983:44;;32046:3;32113:66;32101:9;32093:6;32089:22;32085:95;32080:2;32069:9;32065:18;32058:123;32204:66;32263:6;32247:14;32204:66;:::i;:::-;32190:80;;32319:2;32311:6;32307:15;32301:22;32279:44;;;32342:3;32354:54;32404:2;32393:9;32389:18;32373:14;-1:-1:-1;;;;;80:54:138;68:67;;14:127;32354:54;32450:15;;;;32444:22;32424:18;;32417:50;;;;-1:-1:-1;32484:6:138;30780:1716;-1:-1:-1;30780:1716:138:o;32501:191::-;32569:26;32628:10;;;32616;;;32612:27;;32651:12;;;32648:38;;;32666:18;;:::i;32911:1484::-;33156:2;33208:21;;;33278:13;;33181:18;;;33300:22;;;33127:4;;33156:2;33341;;33359:18;;;;33400:15;;;33127:4;33443:926;33457:6;33454:1;33451:13;33443:926;;;33516:13;;33558:9;;-1:-1:-1;;;;;33554:58:138;33542:71;;33652:11;;;33646:18;33687:10;33731:21;;;33717:12;;;33710:43;33797:11;;;33791:18;33787:27;;33773:12;;;33766:49;33838:4;33886:11;;;33880:18;33876:27;;;33862:12;;;33855:49;33927:4;33975:11;;;33969:18;33989;33965:43;33951:12;;;33944:65;34032:4;34077:11;;;34071:18;34102:47;34136:12;;;34071:18;222;211:30;199:43;;146:102;34102:47;-1:-1:-1;;34172:4:138;34217:11;;;34211:18;9548:13;9541:21;34274:12;;;9529:34;34316:4;34307:14;;;;34344:15;;;;33479:1;33472:9;33443:926;;;-1:-1:-1;34386:3:138;;32911:1484;-1:-1:-1;;;;;;;32911:1484:138:o;34400:369::-;34558:66;34520:19;;34642:11;;;;34673:1;34665:10;;34662:101;;;34750:2;34744;34737:3;34734:1;34730:11;34727:1;34723:19;34719:28;34715:2;34711:37;34707:46;34698:55;;34662:101;;;34400:369;;;;:::o;34774:331::-;34879:9;34890;34932:8;34920:10;34917:24;34914:44;;;34954:1;34951;34944:12;34914:44;34983:6;34973:8;34970:20;34967:40;;;35003:1;35000;34993:12;34967:40;-1:-1:-1;;35029:23:138;;;35074:25;;;;;-1:-1:-1;34774:331:138:o;35110:446::-;35202:6;35255:2;35243:9;35234:7;35230:23;35226:32;35223:52;;;35271:1;35268;35261:12;35223:52;35304:2;35298:9;35346:2;35338:6;35334:15;35415:6;35403:10;35400:22;35379:18;35367:10;35364:34;35361:62;35358:88;;;35426:18;;:::i;:::-;35462:2;35455:22;35501:23;;35486:39;;-1:-1:-1;35493:6:138;35110:446;-1:-1:-1;35110:446:138:o;35814:208::-;35884:6;35937:2;35925:9;35916:7;35912:23;35908:32;35905:52;;;35953:1;35950;35943:12;35905:52;35976:40;36006:9;35976:40;:::i;36027:172::-;36094:10;36124;;;36136;;;36120:27;;36159:11;;;36156:37;;;36173:18;;:::i;36887:268::-;36974:6;37027:2;37015:9;37006:7;37002:23;36998:32;36995:52;;;37043:1;37040;37033:12;36995:52;37075:9;37069:16;37094:31;37119:5;37094:31;:::i;37160:128::-;37227:9;;;37248:11;;;37245:37;;;37262:18;;:::i;37293:200::-;37359:9;;;37332:4;37387:9;;37415:10;;37427:12;;;37411:29;37450:12;;;37442:21;;37408:56;37405:82;;;37467:18;;:::i;37800:425::-;38088:3;38073:19;;38101:49;38077:9;38132:6;-1:-1:-1;;;;;410:2:138;402:5;396:12;392:21;387:3;380:34;460:4;453:5;449:16;443:23;485:18;553:2;539:12;535:21;528:4;523:3;519:14;512:45;618:2;610:4;603:5;599:16;593:23;589:32;582:4;577:3;573:14;566:56;683:2;675:4;668:5;664:16;658:23;654:32;647:4;642:3;638:14;631:56;;;748:26;740:4;733:5;729:16;723:23;719:56;712:4;707:3;703:14;696:80;837:2;829:4;822:5;818:16;812:23;808:32;801:4;796:3;792:14;785:56;902:2;894:4;887:5;883:16;877:23;873:32;866:4;861:3;857:14;850:56;;253:659;;;38101:49;14134:12;;-1:-1:-1;;;;;14130:21:138;;;38214:3;38199:19;;14118:34;14198:4;14187:16;;14181:23;14223:6;14261:21;;;14245:14;;;14238:45;14331:4;14320:16;;14314:23;14356:10;14398:23;;;14382:14;;;14375:47;14475:4;14464:16;;14458:23;14454:32;;;14438:14;;;14431:56;14540:4;14529:16;;14523:23;14519:32;;;14503:14;;;14496:56;14605:4;14594:16;;14588:23;14584:32;14568:14;;;14561:56;14670:4;14659:16;;14653:23;14678:18;14649:48;14633:14;;;14626:72;38159:60;13990:714;38230:196;38269:3;38297:5;38287:39;;38306:18;;:::i;:::-;-1:-1:-1;38353:66:138;38342:78;;38230:196::o;38431:422::-;38711:10;38703:6;38699:23;38688:9;38681:42;38759:2;38754;38743:9;38739:18;38732:30;38662:4;38779:68;38843:2;38832:9;38828:18;38820:6;38779:68;:::i;38858:453::-;38970:6;39023:2;39011:9;39002:7;38998:23;38994:32;38991:52;;;39039:1;39036;39029:12;38991:52;39065:22;;:::i;:::-;39110:40;39140:9;39110:40;:::i;:::-;39103:5;39096:55;39196:2;39185:9;39181:18;39175:25;39209:32;39233:7;39209:32;:::i;39316:341::-;39561:2;39550:9;39543:21;39524:4;39581:70;39647:2;39636:9;39632:18;39624:6;39581:70;:::i;41280:962::-;41541:2;41593:21;;;41663:13;;41566:18;;;41685:22;;;41512:4;;41541:2;41726;;41744:18;;;;41785:15;;;41512:4;41828:388;41842:6;41839:1;41836:13;41828:388;;;41901:13;;41943:9;;-1:-1:-1;;;;;41939:58:138;41927:71;;42042:11;;;42036:18;42056:6;42032:31;42018:12;;;42011:53;42108:11;;42102:18;42122:10;42098:35;42084:12;;;42077:57;42163:4;42154:14;;;;42191:15;;;;41864:1;41857:9;41828:388;;43383:184;43435:77;43432:1;43425:88;43532:4;43529:1;43522:15;43556:4;43553:1;43546:15;44338:287;44467:3;44505:6;44499:13;44521:66;44580:6;44575:3;44568:4;44560:6;44556:17;44521:66;:::i;:::-;44603:16;;;;;44338:287;-1:-1:-1;;44338:287:138:o",
    "linkReferences": {},
    "immutableReferences": {
      "53954": [
        {
          "start": 7390,
          "length": 32
        }
      ],
      "53957": [
        {
          "start": 717,
          "length": 32
        },
        {
          "start": 9924,
          "length": 32
        },
        {
          "start": 13546,
          "length": 32
        }
      ],
      "53960": [
        {
          "start": 765,
          "length": 32
        },
        {
          "start": 6468,
          "length": 32
        },
        {
          "start": 13587,
          "length": 32
        }
      ],
      "53963": [
        {
          "start": 574,
          "length": 32
        },
        {
          "start": 3890,
          "length": 32
        },
        {
          "start": 6015,
          "length": 32
        },
        {
          "start": 6264,
          "length": 32
        },
        {
          "start": 9085,
          "length": 32
        },
        {
          "start": 12344,
          "length": 32
        },
        {
          "start": 13428,
          "length": 32
        },
        {
          "start": 14080,
          "length": 32
        }
      ],
      "53966": [
        {
          "start": 621,
          "length": 32
        },
        {
          "start": 6911,
          "length": 32
        },
        {
          "start": 13465,
          "length": 32
        }
      ],
      "53969": [
        {
          "start": 669,
          "length": 32
        },
        {
          "start": 3023,
          "length": 32
        },
        {
          "start": 7620,
          "length": 32
        },
        {
          "start": 13507,
          "length": 32
        }
      ],
      "53972": [
        {
          "start": 817,
          "length": 32
        },
        {
          "start": 5021,
          "length": 32
        },
        {
          "start": 5125,
          "length": 32
        },
        {
          "start": 6604,
          "length": 32
        },
        {
          "start": 6708,
          "length": 32
        },
        {
          "start": 13641,
          "length": 32
        }
      ],
      "53975": [
        {
          "start": 864,
          "length": 32
        },
        {
          "start": 5255,
          "length": 32
        },
        {
          "start": 13680,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "acceptOwnership()": "79ba5097",
    "applyAllowListUpdates(address[],address[])": "54c8a4f3",
    "applyPoolUpdates((address,address)[],(address,address)[])": "3a87ac53",
    "currentRateLimiterState()": "546719cd",
    "forwardFromRouter((bytes,bytes,(address,uint256)[],address,bytes),uint256,address)": "a7d3e02f",
    "getAllowList()": "a7cd63b7",
    "getAllowListEnabled()": "e0351e13",
    "getDynamicConfig()": "7437ff9f",
    "getExpectedNextSequenceNumber()": "4120fccd",
    "getFee((bytes,bytes,(address,uint256)[],address,bytes))": "38724a95",
    "getFeeTokenConfig(address)": "9a113c36",
    "getNopFeesJuels()": "54b71468",
    "getNops()": "b06d41bc",
    "getPoolBySourceToken(address)": "5d86f141",
    "getSenderNonce(address)": "856c8247",
    "getStaticConfig()": "06285c69",
    "getSupportedTokens()": "d3c7c2c7",
    "getTokenLimitAdmin()": "599f6431",
    "getTokenTransferFeeConfig(address)": "1772047e",
    "linkAvailableForPayment()": "d09dc339",
    "owner()": "8da5cb5b",
    "payNops()": "eff7cc48",
    "setAdmin(address)": "704b6c02",
    "setAllowListEnabled(bool)": "efeadb6d",
    "setDynamicConfig((address,uint16,uint32,uint16,address,uint32,uint64))": "7132721a",
    "setFeeTokenConfig((address,uint32,uint32,uint32,uint64,uint64,bool)[])": "352e4bc8",
    "setNops((address,uint16)[])": "76f6ae76",
    "setRateLimiterConfig((bool,uint128,uint128))": "c92b2832",
    "setTokenTransferFeeConfig((address,uint16,uint32)[])": "e76c0b06",
    "transferOwnership(address)": "f2fde38b",
    "typeAndVersion()": "181f5a77",
    "withdrawNonLinkFees(address,address)": "549e946f"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"struct EVM2EVMOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"maxGasLimit\",\"type\":\"uint64\"}],\"internalType\":\"struct EVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"struct Internal.PoolUpdate[]\",\"name\":\"tokensAndPools\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"struct RateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"struct EVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeTokenConfigs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"}],\"internalType\":\"struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"struct EVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"}],\"name\":\"InvalidNopAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenPoolConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWithdrawParams\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkBalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxFeeBalanceReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoFeesToPay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoNopsToPay\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"NotAFeeToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdminOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdminOrNop\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenPoolMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyNops\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"AllowListEnabledSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Client.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct Internal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct EVM2EVMOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"maxGasLimit\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct EVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct EVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeConfig\",\"type\":\"tuple[]\"}],\"name\":\"FeeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NopPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nopWeightsTotal\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"struct EVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"name\":\"NopsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"transferFeeConfig\",\"type\":\"tuple[]\"}],\"name\":\"TokenTransferFeeConfigSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"struct Internal.PoolUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"struct Internal.PoolUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"applyPoolUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"struct RateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Client.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"struct Client.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"maxGasLimit\",\"type\":\"uint64\"}],\"internalType\":\"struct EVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Client.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"struct Client.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getFeeTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"struct EVM2EVMOnRamp.FeeTokenConfig\",\"name\":\"feeTokenConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNopFeesJuels\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNops\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"struct EVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"weightsTotal\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getSenderNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"struct EVM2EVMOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"}],\"internalType\":\"struct EVM2EVMOnRamp.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkAvailableForPayment\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payNops\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"maxGasLimit\",\"type\":\"uint64\"}],\"internalType\":\"struct EVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"struct EVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeTokenConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setFeeTokenConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"struct EVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"name\":\"setNops\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"struct RateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"}],\"internalType\":\"struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setTokenTransferFeeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawNonLinkFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The EVM2EVMOnRamp, CommitStore and EVM2EVMOffRamp form an xchain upgradeable unit. Any change to one of them results an onchain upgrade of all 3.\",\"kind\":\"dev\",\"methods\":{\"applyAllowListUpdates(address[],address[])\":{\"details\":\"allowListing will be removed before public launch\",\"params\":{\"adds\":\"The addresses to be added.\",\"removes\":\"The addresses to be removed.\"}},\"applyPoolUpdates((address,address)[],(address,address)[])\":{\"details\":\"This method can only be called by the owner of the contract.\",\"params\":{\"adds\":\"The tokens and pools to be added.\",\"removes\":\"The tokens and pools to be removed\"}},\"currentRateLimiterState()\":{\"returns\":{\"_0\":\"The token bucket.\"}},\"forwardFromRouter((bytes,bytes,(address,uint256)[],address,bytes),uint256,address)\":{\"details\":\"only callable by the Routerapprove() must have already been called on the token using the this ramp address as the spender.if the contract is paused, this function will revert.\",\"params\":{\"message\":\"Message struct to send\",\"originalSender\":\"The original initiator of the CCIP request\"}},\"getAllowList()\":{\"details\":\"May not work if allow list gets too large. Use events in that case to compute the set.\",\"returns\":{\"_0\":\"The allowed addresses.\"}},\"getAllowListEnabled()\":{\"returns\":{\"_0\":\"true is enabled, false if not.\"}},\"getDynamicConfig()\":{\"returns\":{\"dynamicConfig\":\"the configuration.\"}},\"getExpectedNextSequenceNumber()\":{\"returns\":{\"_0\":\"the next sequence number to be used\"}},\"getFee((bytes,bytes,(address,uint256)[],address,bytes))\":{\"details\":\"getFee MUST revert if the feeToken is not listed in the fee token config. as the router assumes it does.\",\"params\":{\"message\":\"The message to calculate the cost for\"},\"returns\":{\"_0\":\"The calculated fee\"}},\"getFeeTokenConfig(address)\":{\"params\":{\"token\":\"The token to get the fee configuration for\"},\"returns\":{\"feeTokenConfig\":\"FeeTokenConfig struct\"}},\"getNopFeesJuels()\":{\"returns\":{\"_0\":\"totalNopFees\"}},\"getNops()\":{\"returns\":{\"nopsAndWeights\":\"Array of NopAndWeight structs\",\"weightsTotal\":\"The sum weight of all Nops\"}},\"getPoolBySourceToken(address)\":{\"params\":{\"sourceToken\":\"The source chain token to get the pool for\"},\"returns\":{\"_0\":\"pool Token pool\"}},\"getSenderNonce(address)\":{\"params\":{\"sender\":\"The sender to get the nonce for\"},\"returns\":{\"_0\":\"The next nonce for the sender\"}},\"getStaticConfig()\":{\"returns\":{\"_0\":\"the configuration.\"}},\"getSupportedTokens()\":{\"returns\":{\"_0\":\"The addresses of all tokens that this onRamp supports for sending.\"}},\"getTokenLimitAdmin()\":{\"returns\":{\"_0\":\"the token limit admin address.\"}},\"payNops()\":{\"details\":\"some balance can remain after payments are done. This is at most the sum of the weight of all nops. Since nop weights are uint16s and we can have at most MAX_NUMBER_OF_NOPS NOPs, the highest possible value is 2**22 or 0.04 gjuels.\"},\"setAdmin(address)\":{\"details\":\"setting this to address(0) indicates there is no active admin.\",\"params\":{\"newAdmin\":\"the address of the new admin.\"}},\"setAllowListEnabled(bool)\":{\"params\":{\"enabled\":\"Signals whether the allowlist should be enabled.\"}},\"setDynamicConfig((address,uint16,uint32,uint16,address,uint32,uint64))\":{\"params\":{\"dynamicConfig\":\"The configuration.\"}},\"setFeeTokenConfig((address,uint32,uint32,uint32,uint64,uint64,bool)[])\":{\"params\":{\"feeTokenConfigArgs\":\"Array of FeeTokenConfigArgs structs.\"}},\"setNops((address,uint16)[])\":{\"params\":{\"nopsAndWeights\":\"Array of NopAndWeight structs\"}},\"setRateLimiterConfig((bool,uint128,uint128))\":{\"details\":\"should only be callable by the owner or token limit admin.\",\"params\":{\"config\":\"The new rate limiter config.\"}},\"setTokenTransferFeeConfig((address,uint16,uint32)[])\":{\"details\":\"only callable by the owner or admin.\"},\"withdrawNonLinkFees(address,address)\":{\"params\":{\"feeToken\":\"The token to withdraw\",\"to\":\"The address to send the tokens to\"}}},\"stateVariables\":{\"MAX_NUMBER_OF_NOPS\":{\"details\":\"the maximum number of nops that can be configured at the same time. Used to bound gas for loops over nops.\"},\"i_armProxy\":{\"details\":\"The address of the arm proxy\"},\"i_chainSelector\":{\"details\":\"The chain ID of the source chain that this contract is deployed to\"},\"i_defaultTxGasLimit\":{\"details\":\"Default gas limit for a transactions that did not specify a gas limit in the extraArgs.\"},\"i_destChainSelector\":{\"details\":\"The chain ID of the destination chain\"},\"i_linkToken\":{\"details\":\"The link token address - known to pay nops for their work\"},\"i_maxNopFeesJuels\":{\"details\":\"Maximum nop fee that can accumulate in this onramp\"},\"i_metadataHash\":{\"details\":\"metadataHash is a lane-specific prefix for a message hash preimage which ensures global uniqueness Ensures that 2 identical messages sent to 2 different lanes will have a distinct hash. Must match the metadataHash used in computing leaf hashes offchain for the root committed in the commitStore and i_metadataHash in the offRamp.\"},\"i_prevOnRamp\":{\"details\":\"The address of previous-version OnRamp for this lane Used to be able to provide sequencing continuity during a zero downtime upgrade.\"},\"s_allowList\":{\"details\":\"A set of addresses which can make ccipSend calls.\"},\"s_allowlistEnabled\":{\"details\":\"This allowListing will be removed before public launchWhether s_allowList is enabled or not.\"},\"s_dynamicConfig\":{\"details\":\"The config for the onRamp\"},\"s_feeTokenConfig\":{\"details\":\"The execution fee token config that can be set by the owner or fee admin\"},\"s_nopFeesJuels\":{\"details\":\"The amount of LINK available to pay NOPS\"},\"s_nopWeightsTotal\":{\"details\":\"The combined weight of all NOPs weights\"},\"s_nops\":{\"details\":\"(address nop => uint256 weight)\"},\"s_paused\":{\"details\":\"Whether this OnRamp is paused or not\"},\"s_poolsBySourceToken\":{\"details\":\"source token => token pool\"},\"s_senderNonce\":{\"details\":\"The current nonce per sender. The offramp has a corresponding s_senderNonce mapping to ensure messages are executed in the same order they are sent.\"},\"s_sequenceNumber\":{\"details\":\"The last used sequence number. This is zero in the case where no messages has been sent yet. 0 is not a valid sequence number for any real transaction.\"},\"s_tokenTransferFeeConfig\":{\"details\":\"The token transfer fee config that can be set by the owner or fee admin\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Allows an ownership transfer to be completed by the recipient.\"},\"applyAllowListUpdates(address[],address[])\":{\"notice\":\"Apply updates to the allow list.\"},\"applyPoolUpdates((address,address)[],(address,address)[])\":{\"notice\":\"Adds and removed token pools.\"},\"currentRateLimiterState()\":{\"notice\":\"Gets the token bucket with its values for the block it was requested at.\"},\"forwardFromRouter((bytes,bytes,(address,uint256)[],address,bytes),uint256,address)\":{\"notice\":\"Send a message to the remote chain\"},\"getAllowList()\":{\"notice\":\"Gets the allowed addresses.\"},\"getAllowListEnabled()\":{\"notice\":\"Gets whether the allowList functionality is enabled.\"},\"getDynamicConfig()\":{\"notice\":\"Returns the dynamic onRamp config.\"},\"getExpectedNextSequenceNumber()\":{\"notice\":\"Gets the next sequence number to be used in the onRamp\"},\"getFee((bytes,bytes,(address,uint256)[],address,bytes))\":{\"notice\":\"Get the fee for a given ccip message\"},\"getFeeTokenConfig(address)\":{\"notice\":\"Gets the fee configuration for a token\"},\"getNopFeesJuels()\":{\"notice\":\"Get the total amount of fees to be paid to the Nops (in LINK)\"},\"getNops()\":{\"notice\":\"Gets the Nops and their weights\"},\"getPoolBySourceToken(address)\":{\"notice\":\"Get the pool for a specific token\"},\"getSenderNonce(address)\":{\"notice\":\"Get the next nonce for a given sender\"},\"getStaticConfig()\":{\"notice\":\"Returns the static onRamp config.\"},\"getSupportedTokens()\":{\"notice\":\"Gets a list of all supported source chain tokens.\"},\"getTokenLimitAdmin()\":{\"notice\":\"Gets the token limit admin address.\"},\"getTokenTransferFeeConfig(address)\":{\"notice\":\"Gets the transfer fee config for a given token.\"},\"linkAvailableForPayment()\":{\"notice\":\"Allow keeper to monitor funds available for paying nops\"},\"owner()\":{\"notice\":\"Get the current owner\"},\"payNops()\":{\"notice\":\"Pays the Node Ops their outstanding balances.\"},\"setAdmin(address)\":{\"notice\":\"Sets the token limit admin address.\"},\"setAllowListEnabled(bool)\":{\"notice\":\"Enables or disabled the allowList functionality.\"},\"setDynamicConfig((address,uint16,uint32,uint16,address,uint32,uint64))\":{\"notice\":\"Sets the dynamic configuration.\"},\"setFeeTokenConfig((address,uint32,uint32,uint32,uint64,uint64,bool)[])\":{\"notice\":\"Sets the fee configuration for a token\"},\"setNops((address,uint16)[])\":{\"notice\":\"Sets the Nops and their weights\"},\"setRateLimiterConfig((bool,uint128,uint128))\":{\"notice\":\"Sets the rate limited config.\"},\"setTokenTransferFeeConfig((address,uint16,uint32)[])\":{\"notice\":\"Sets the transfer fee config.\"},\"transferOwnership(address)\":{\"notice\":\"Allows an owner to begin transferring ownership to a new address, pending.\"},\"withdrawNonLinkFees(address,address)\":{\"notice\":\"Allows the owner to withdraw any ERC20 token that is not the fee token\"}},\"notice\":\"The onRamp is a contract that handles lane-specific fee logic, NOP payments, bridegable token support and an allowList.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol\":\"EVM2EVMOnRamp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":26000},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"src/v0.8/ccip/AggregateRateLimiter.sol\":{\"keccak256\":\"0xbb8db62d2ffc22469a7b0807689b9e5a4d8cff2124d3a8f3a487901d65093c86\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://548fb5dacaa4381dbd30b0b8e91434de6e3d33bdbaf246e9c68ecf9151ad0550\",\"dweb:/ipfs/Qmdm5J9xE6Bsn4PZctbETGXfVvMd3vLWLNG6Xu8zTZKWt7\"]},\"src/v0.8/ccip/interfaces/IARM.sol\":{\"keccak256\":\"0x7d0609f6b36bce268df88bb6b525d1b53033f5ad443579a22f06ba92974f89cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9899c4237f92f635ed23f8403963091c996dcc2d5bac540f5cb0010b95246429\",\"dweb:/ipfs/QmSri7Q36D5UCPRvDoCFr9RJYQKLKr9188wRxrVYyADVH4\"]},\"src/v0.8/ccip/interfaces/IEVM2AnyOnRamp.sol\":{\"keccak256\":\"0x96b8910f163f85e2b5a4844c46128b6bb37f72990ab20ffe5ce7a3b36a87e470\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://794bf5a43506181bc224a7fa598522fd6af2c87371272e51421cbc00be32039c\",\"dweb:/ipfs/QmcwzEVQ6WEKYJzLfZz7hgzjaQnFAf9LnjBXJLLhxQRvA6\"]},\"src/v0.8/ccip/interfaces/IPriceRegistry.sol\":{\"keccak256\":\"0x98df90564b54f655220bc2591f82d596ac450a34036d422eac133e445aab8607\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://58cfa2fb7260e9cb91dd417da0c5102e27fefdad807f6e147a0edd455082c4f0\",\"dweb:/ipfs/QmbfBD1aJkZKp4X34BXU8jxgUY7s5cxYxM9XeP2gM9rTP8\"]},\"src/v0.8/ccip/interfaces/automation/ILinkAvailable.sol\":{\"keccak256\":\"0x0df7f0e782851418610088ee580fcb0eea4004d6cf2f3f8c9e687c52035de31e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e59b4a34457b386b22544c3f5936a1057d392e32ed0981ce466daa659b98fb77\",\"dweb:/ipfs/QmcT6Q1jfD4fy3br941Ay7SoXKpwj1yP4qidd6EV2q1531\"]},\"src/v0.8/ccip/interfaces/pools/IPool.sol\":{\"keccak256\":\"0xd1304829f4a2f244935c2825bb963a2ce885d67716a8286d2e09230679cae840\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e0cc32b9a6e49b56ebf8231e173c650b29cb83b8d47cbf186564cb5cf4c9e7e\",\"dweb:/ipfs/QmawsMRBgPHyRifjqsY9iw7ebMkzJsKHvDHahYa9A1kLDZ\"]},\"src/v0.8/ccip/libraries/Client.sol\":{\"keccak256\":\"0x01d88151b2e0b675c7cd89f9dcdc1d9c92332be74938c1cedfe05e910a7cbddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://939fabf11f282fdcf26342965c824b77f7bb190468f9206535a870371ffd87c5\",\"dweb:/ipfs/QmXHSWmPbVhMcYLokmvrqTxgQtVjoqzMES4RrbxyJk8s3a\"]},\"src/v0.8/ccip/libraries/Internal.sol\":{\"keccak256\":\"0x785e08a813588a932c3d84dbfbd9e2f75c0ea6efa1246aa543c3e7236de8434b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://608d4d9a05b1ceda602ff27051743c56732770abc2b2d77343035c6c8b67e717\",\"dweb:/ipfs/QmcHZyGVZNgw3ueW5coQh66afd8WwLKLYMUKpdcwqctHKf\"]},\"src/v0.8/ccip/libraries/MerkleMultiProof.sol\":{\"keccak256\":\"0x9f2e5edd718cd1b5aa7143ca39ee50d7c15b8456ce32c49c10833c9ef3b0eb72\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c2591501ed4b28164009e58166324634a0ce79a0599ee682d47d825f302a9955\",\"dweb:/ipfs/QmeN35m4PFQDBc1ew2Q5koYNfchf8DcTemUmXVFVSuZV5t\"]},\"src/v0.8/ccip/libraries/RateLimiter.sol\":{\"keccak256\":\"0x954918ef682644488459befbbbeef4f0b8f45873b38ace197af43bf619fdf4d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://232e49fc42d7397a43787269179f1b99e08e1907161b927c09103921379b2bda\",\"dweb:/ipfs/QmRTHcs9Uuc7W2gBSssonEp9fUcrTfckEEKh4RQERBWJ2S\"]},\"src/v0.8/ccip/libraries/USDPriceWith18Decimals.sol\":{\"keccak256\":\"0x1eb3b2aa151153c6133a50e525090fb46001cfe0a10ae158cc68f6721f060ffa\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5a7a9525db27647c62db31c382026f405d5025ce35631a1bbae34b09a1eff3d9\",\"dweb:/ipfs/QmSAFAumowR8FnSs6GHCq9mdUP67XSZeh7APYmaKDccSfi\"]},\"src/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol\":{\"keccak256\":\"0xf5c4f98bc320104a7e2437c37b6c3ce9747e00564aa3c961ecca6b1383f42e4d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cd1922939b3705b6b15ae1adbb2aac7c510a5e43b7ed8b161b6aa0f5ce2d972e\",\"dweb:/ipfs/QmWgEoiRvFU1o5brNHqwveme7UJBm1SpJoPJ6cS6QPmczJ\"]},\"src/v0.8/interfaces/TypeAndVersionInterface.sol\":{\"keccak256\":\"0x805cc9a91d54db1bea60cb19f38364f1eac2735bddb3476294fb803c2f6b7097\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05762f3335bb50fde2ece5ffbb735f22db35dc9489ea4716a4e731aa0aeee1e1\",\"dweb:/ipfs/QmNu4sZk9T8PZYMn2BvxECF911hAviCjE2T846Zir8H7RB\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"keccak256\":\"0x99d0b0786fe368970009c703f2249bfbc56340ddf1a28b60d2915bb58c34cd72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af0371c1af45db651823b9a3d5af761b08243c78f105166342eee28de356c8dd\",\"dweb:/ipfs/QmPnC9qNDKwJFd5unwLb9pxjrutoe8MWjm5EXHTxq2kJ4x\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"keccak256\":\"0x215529a99534a40e6257ef2282a91ea4a95b66debc3997866406907622efb405\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ecc56a2cddb1ba6225ca0cffb07fdf6e24bcc4234cc87710c42a59c0a21ae395\",\"dweb:/ipfs/QmSpW4vkPHeRNZ14beMEk2LEtqY5JQTueNJC4sCT8JaSoc\"]},\"src/v0.8/shared/access/OwnerIsCreator.sol\":{\"keccak256\":\"0x895af02d6a3df2930bbb6ec1f2d68118b492ca6e710ba0c34fcb6b574a0906aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4c69fab5eea1c0448f856a51d7e5736454fe5cc083d36c60bf3ee23bb3d0e8e\",\"dweb:/ipfs/QmP4fYQ9k7xeZms6cwnqnQuuAkRkeE2TWewyvCD8Mrc2DZ\"]},\"src/v0.8/shared/enumerable/EnumerableMapAddresses.sol\":{\"keccak256\":\"0x0bd57d416b274af3098432564d2f124f718b81712b0e05fea10a63c52768893e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c1644c70d8fd923ed94abdc0c49665414317b793b7a9b6d328fe45a2c72dbc3\",\"dweb:/ipfs/QmY1jf2UKfzNzCJL6UEegMyiMhbJEBRkijMQmsTwbLWjfU\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"keccak256\":\"0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c636625a5d29a140612db496d2cca9fb4b48c673adb0fd7b3957d287e75921\",\"dweb:/ipfs/QmNoBX8TY424bdQWyQC7y3kpKfgxyWxhLw7KEhhEEoBN9q\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x527e858729af8197f6c8f99554d32bfc4f5a72b15975489c94809363d7ae522f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6828dfa867eaff18f383aad4ca4b5aaedb93109023d74aaf418fee6c06e556c2\",\"dweb:/ipfs/QmXSQ9WnaJ6Ba9gvKvgNxDY7sa7ATJ9V55uwGSGCpBuJKu\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0x28d267ba89cbaca4a86577add59f1a18842ca6e7d80a05f3dbf52127928a5e2c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a26777e88ae78952713f4479ca3126db804dc9ce1a85f079ec067393a6275d\",\"dweb:/ipfs/QmNLxBkkA6os8W9vUeCsjcFsMkGhtqAZrGjPuoACTqVhbh\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x19d64e8f5fa895ab2625917111fd9f316d4f9314239f0712fd6dc2f5bff9d0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://14de158ff9e64ebeac381bba59fe3500b48853063cfb27343090a3f710795fee\",\"dweb:/ipfs/QmQJE5SfDfgy8aKENnsjW4t9P4bmTSnujotFmnXnrwpfzQ\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/Address.sol\":{\"keccak256\":\"0x172a09a55d730f20a9bb309086a4ad06b17c612151f58bab2b44efe78d583d4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f812456ddd112f09606bfc5965c6e643558d740264273017ad556122502b4e2\",\"dweb:/ipfs/QmdWE4wncanz9Lhu5ESgSo14jAR74Ss5puCM5zUGonATLw\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableMap.sol\":{\"keccak256\":\"0x68fb09424d69c771ebaeb5a425bcbdbb0725a236c0d83d517992b6f44bd7198d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3a036ba98e5d58911511b85abd620e1d8de7d203ab2a48b2a3d827710847df4\",\"dweb:/ipfs/QmNWrWgkfsk1AoLpWKDkbHu5CZmzEcGzrT74Ug46phm4p5\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9ec0d82ee53d4137be44f1f38f9a82d0d3a2027b3b8b226a5a90e4ee76e926d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f783b453420dee16bb4f0839e3d2485d753d2dcd317adbeecb7e510c39563f57\",\"dweb:/ipfs/QmUd4BeCaw6ZujaYvvMrCn2BNqmiP4bt4eA9rxiXY5od5E\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.19+commit.7dd6d404"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.StaticConfig",
              "name": "staticConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "linkToken",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "chainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "destChainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "defaultTxGasLimit",
                  "type": "uint64"
                },
                {
                  "internalType": "uint96",
                  "name": "maxNopFeesJuels",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "prevOnRamp",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "armProxy",
                  "type": "address"
                }
              ]
            },
            {
              "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
              "name": "dynamicConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "router",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "maxTokensLength",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                },
                {
                  "internalType": "uint16",
                  "name": "destGasPerPayloadByte",
                  "type": "uint16"
                },
                {
                  "internalType": "address",
                  "name": "priceRegistry",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "maxDataSize",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "maxGasLimit",
                  "type": "uint64"
                }
              ]
            },
            {
              "internalType": "struct Internal.PoolUpdate[]",
              "name": "tokensAndPools",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ]
            },
            {
              "internalType": "address[]",
              "name": "allowlist",
              "type": "address[]"
            },
            {
              "internalType": "struct RateLimiter.Config",
              "name": "rateLimiterConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bool",
                  "name": "isEnabled",
                  "type": "bool"
                },
                {
                  "internalType": "uint128",
                  "name": "capacity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "rate",
                  "type": "uint128"
                }
              ]
            },
            {
              "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
              "name": "feeTokenConfigs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "networkFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "minTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "maxTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "gasMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "premiumMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "enabled",
                  "type": "bool"
                }
              ]
            },
            {
              "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
              "name": "tokenTransferFeeConfigArgs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "ratio",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                }
              ]
            },
            {
              "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
              "name": "nopsAndWeights",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "nop",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "weight",
                  "type": "uint16"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "capacity",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "requested",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "AggregateValueMaxCapacityExceeded"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "minWaitInSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "available",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "AggregateValueRateLimitReached"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "BadARMSignal"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "BucketOverfilled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InsufficientBalance"
        },
        {
          "inputs": [
            {
              "internalType": "bytes",
              "name": "encodedAddress",
              "type": "bytes"
            }
          ],
          "type": "error",
          "name": "InvalidAddress"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidConfig"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidExtraArgsTag"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "InvalidNopAddress"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidTokenPoolConfig"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidWithdrawParams"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "LinkBalanceNotSettled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MaxFeeBalanceReached"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MessageGasLimitTooHigh"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "maxSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "actualSize",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "MessageTooLarge"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MustBeCalledByRouter"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NoFeesToPay"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NoNopsToPay"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "NotAFeeToken"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OnlyCallableByAdminOrOwner"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OnlyCallableByOwnerOrAdmin"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OnlyCallableByOwnerOrAdminOrNop"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "PoolAlreadyAdded"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "PoolDoesNotExist"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "PriceNotFoundForToken"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "RouterMustSetOriginalSender"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "SenderNotAllowed"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "capacity",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "requested",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "tokenAddress",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "TokenMaxCapacityExceeded"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TokenPoolMismatch"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "minWaitInSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "available",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "tokenAddress",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "TokenRateLimitReached"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TooManyNops"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "UnsupportedNumberOfTokens"
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "token",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "UnsupportedToken"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAdmin",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "AdminSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "AllowListAdd",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "AllowListEnabledSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "AllowListRemove",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct Internal.EVM2EVMMessage",
              "name": "message",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint64",
                  "name": "sourceChainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "sequenceNumber",
                  "type": "uint64"
                },
                {
                  "internalType": "uint256",
                  "name": "feeTokenAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "nonce",
                  "type": "uint64"
                },
                {
                  "internalType": "uint256",
                  "name": "gasLimit",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "strict",
                  "type": "bool"
                },
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "struct Client.EVMTokenAmount[]",
                  "name": "tokenAmounts",
                  "type": "tuple[]",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "address",
                  "name": "feeToken",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "messageId",
                  "type": "bytes32"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "CCIPSendRequested",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.StaticConfig",
              "name": "staticConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "linkToken",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "chainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "destChainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "defaultTxGasLimit",
                  "type": "uint64"
                },
                {
                  "internalType": "uint96",
                  "name": "maxNopFeesJuels",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "prevOnRamp",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "armProxy",
                  "type": "address"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
              "name": "dynamicConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "router",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "maxTokensLength",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                },
                {
                  "internalType": "uint16",
                  "name": "destGasPerPayloadByte",
                  "type": "uint16"
                },
                {
                  "internalType": "address",
                  "name": "priceRegistry",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "maxDataSize",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "maxGasLimit",
                  "type": "uint64"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ConfigSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
              "name": "feeConfig",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "networkFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "minTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "maxTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "gasMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "premiumMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "enabled",
                  "type": "bool"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "FeeConfigSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "nop",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "NopPaid",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "nopWeightsTotal",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
              "name": "nopsAndWeights",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "nop",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "weight",
                  "type": "uint16"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "NopsSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferRequested",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "PoolAdded",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "PoolRemoved",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
              "name": "transferFeeConfig",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "ratio",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "TokenTransferFeeConfigSet",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "removes",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adds",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "applyAllowListUpdates"
        },
        {
          "inputs": [
            {
              "internalType": "struct Internal.PoolUpdate[]",
              "name": "removes",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ]
            },
            {
              "internalType": "struct Internal.PoolUpdate[]",
              "name": "adds",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "applyPoolUpdates"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "currentRateLimiterState",
          "outputs": [
            {
              "internalType": "struct RateLimiter.TokenBucket",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint128",
                  "name": "tokens",
                  "type": "uint128"
                },
                {
                  "internalType": "uint32",
                  "name": "lastUpdated",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "isEnabled",
                  "type": "bool"
                },
                {
                  "internalType": "uint128",
                  "name": "capacity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "rate",
                  "type": "uint128"
                }
              ]
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct Client.EVM2AnyMessage",
              "name": "message",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bytes",
                  "name": "receiver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "struct Client.EVMTokenAmount[]",
                  "name": "tokenAmounts",
                  "type": "tuple[]",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "address",
                  "name": "feeToken",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "extraArgs",
                  "type": "bytes"
                }
              ]
            },
            {
              "internalType": "uint256",
              "name": "feeTokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "originalSender",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "forwardFromRouter",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAllowList",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAllowListEnabled",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getDynamicConfig",
          "outputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
              "name": "dynamicConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "router",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "maxTokensLength",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                },
                {
                  "internalType": "uint16",
                  "name": "destGasPerPayloadByte",
                  "type": "uint16"
                },
                {
                  "internalType": "address",
                  "name": "priceRegistry",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "maxDataSize",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "maxGasLimit",
                  "type": "uint64"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getExpectedNextSequenceNumber",
          "outputs": [
            {
              "internalType": "uint64",
              "name": "",
              "type": "uint64"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct Client.EVM2AnyMessage",
              "name": "message",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bytes",
                  "name": "receiver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "struct Client.EVMTokenAmount[]",
                  "name": "tokenAmounts",
                  "type": "tuple[]",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "address",
                  "name": "feeToken",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "extraArgs",
                  "type": "bytes"
                }
              ]
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getFee",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getFeeTokenConfig",
          "outputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.FeeTokenConfig",
              "name": "feeTokenConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint32",
                  "name": "networkFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "minTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "maxTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "gasMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "premiumMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "enabled",
                  "type": "bool"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getNopFeesJuels",
          "outputs": [
            {
              "internalType": "uint96",
              "name": "",
              "type": "uint96"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getNops",
          "outputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
              "name": "nopsAndWeights",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "nop",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "weight",
                  "type": "uint16"
                }
              ]
            },
            {
              "internalType": "uint256",
              "name": "weightsTotal",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IERC20",
              "name": "sourceToken",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolBySourceToken",
          "outputs": [
            {
              "internalType": "contract IPool",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getSenderNonce",
          "outputs": [
            {
              "internalType": "uint64",
              "name": "",
              "type": "uint64"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getStaticConfig",
          "outputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.StaticConfig",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "linkToken",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "chainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "destChainSelector",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "defaultTxGasLimit",
                  "type": "uint64"
                },
                {
                  "internalType": "uint96",
                  "name": "maxNopFeesJuels",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "prevOnRamp",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "armProxy",
                  "type": "address"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getSupportedTokens",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getTokenLimitAdmin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getTokenTransferFeeConfig",
          "outputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfig",
              "name": "tokenTransferFeeConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ratio",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "linkAvailableForPayment",
          "outputs": [
            {
              "internalType": "int256",
              "name": "",
              "type": "int256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "payNops"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAdmin",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAdmin"
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAllowListEnabled"
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.DynamicConfig",
              "name": "dynamicConfig",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "router",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "maxTokensLength",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                },
                {
                  "internalType": "uint16",
                  "name": "destGasPerPayloadByte",
                  "type": "uint16"
                },
                {
                  "internalType": "address",
                  "name": "priceRegistry",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "maxDataSize",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "maxGasLimit",
                  "type": "uint64"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setDynamicConfig"
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]",
              "name": "feeTokenConfigArgs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "networkFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "minTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "maxTokenTransferFeeUSD",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "gasMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "uint64",
                  "name": "premiumMultiplier",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "enabled",
                  "type": "bool"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setFeeTokenConfig"
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.NopAndWeight[]",
              "name": "nopsAndWeights",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "nop",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "weight",
                  "type": "uint16"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setNops"
        },
        {
          "inputs": [
            {
              "internalType": "struct RateLimiter.Config",
              "name": "config",
              "type": "tuple",
              "components": [
                {
                  "internalType": "bool",
                  "name": "isEnabled",
                  "type": "bool"
                },
                {
                  "internalType": "uint128",
                  "name": "capacity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "rate",
                  "type": "uint128"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setRateLimiterConfig"
        },
        {
          "inputs": [
            {
              "internalType": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]",
              "name": "tokenTransferFeeConfigArgs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint16",
                  "name": "ratio",
                  "type": "uint16"
                },
                {
                  "internalType": "uint32",
                  "name": "destGasOverhead",
                  "type": "uint32"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setTokenTransferFeeConfig"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "typeAndVersion",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "feeToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdrawNonLinkFees"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "applyAllowListUpdates(address[],address[])": {
            "details": "allowListing will be removed before public launch",
            "params": {
              "adds": "The addresses to be added.",
              "removes": "The addresses to be removed."
            }
          },
          "applyPoolUpdates((address,address)[],(address,address)[])": {
            "details": "This method can only be called by the owner of the contract.",
            "params": {
              "adds": "The tokens and pools to be added.",
              "removes": "The tokens and pools to be removed"
            }
          },
          "currentRateLimiterState()": {
            "returns": {
              "_0": "The token bucket."
            }
          },
          "forwardFromRouter((bytes,bytes,(address,uint256)[],address,bytes),uint256,address)": {
            "details": "only callable by the Routerapprove() must have already been called on the token using the this ramp address as the spender.if the contract is paused, this function will revert.",
            "params": {
              "message": "Message struct to send",
              "originalSender": "The original initiator of the CCIP request"
            }
          },
          "getAllowList()": {
            "details": "May not work if allow list gets too large. Use events in that case to compute the set.",
            "returns": {
              "_0": "The allowed addresses."
            }
          },
          "getAllowListEnabled()": {
            "returns": {
              "_0": "true is enabled, false if not."
            }
          },
          "getDynamicConfig()": {
            "returns": {
              "dynamicConfig": "the configuration."
            }
          },
          "getExpectedNextSequenceNumber()": {
            "returns": {
              "_0": "the next sequence number to be used"
            }
          },
          "getFee((bytes,bytes,(address,uint256)[],address,bytes))": {
            "details": "getFee MUST revert if the feeToken is not listed in the fee token config. as the router assumes it does.",
            "params": {
              "message": "The message to calculate the cost for"
            },
            "returns": {
              "_0": "The calculated fee"
            }
          },
          "getFeeTokenConfig(address)": {
            "params": {
              "token": "The token to get the fee configuration for"
            },
            "returns": {
              "feeTokenConfig": "FeeTokenConfig struct"
            }
          },
          "getNopFeesJuels()": {
            "returns": {
              "_0": "totalNopFees"
            }
          },
          "getNops()": {
            "returns": {
              "nopsAndWeights": "Array of NopAndWeight structs",
              "weightsTotal": "The sum weight of all Nops"
            }
          },
          "getPoolBySourceToken(address)": {
            "params": {
              "sourceToken": "The source chain token to get the pool for"
            },
            "returns": {
              "_0": "pool Token pool"
            }
          },
          "getSenderNonce(address)": {
            "params": {
              "sender": "The sender to get the nonce for"
            },
            "returns": {
              "_0": "The next nonce for the sender"
            }
          },
          "getStaticConfig()": {
            "returns": {
              "_0": "the configuration."
            }
          },
          "getSupportedTokens()": {
            "returns": {
              "_0": "The addresses of all tokens that this onRamp supports for sending."
            }
          },
          "getTokenLimitAdmin()": {
            "returns": {
              "_0": "the token limit admin address."
            }
          },
          "payNops()": {
            "details": "some balance can remain after payments are done. This is at most the sum of the weight of all nops. Since nop weights are uint16s and we can have at most MAX_NUMBER_OF_NOPS NOPs, the highest possible value is 2**22 or 0.04 gjuels."
          },
          "setAdmin(address)": {
            "details": "setting this to address(0) indicates there is no active admin.",
            "params": {
              "newAdmin": "the address of the new admin."
            }
          },
          "setAllowListEnabled(bool)": {
            "params": {
              "enabled": "Signals whether the allowlist should be enabled."
            }
          },
          "setDynamicConfig((address,uint16,uint32,uint16,address,uint32,uint64))": {
            "params": {
              "dynamicConfig": "The configuration."
            }
          },
          "setFeeTokenConfig((address,uint32,uint32,uint32,uint64,uint64,bool)[])": {
            "params": {
              "feeTokenConfigArgs": "Array of FeeTokenConfigArgs structs."
            }
          },
          "setNops((address,uint16)[])": {
            "params": {
              "nopsAndWeights": "Array of NopAndWeight structs"
            }
          },
          "setRateLimiterConfig((bool,uint128,uint128))": {
            "details": "should only be callable by the owner or token limit admin.",
            "params": {
              "config": "The new rate limiter config."
            }
          },
          "setTokenTransferFeeConfig((address,uint16,uint32)[])": {
            "details": "only callable by the owner or admin."
          },
          "withdrawNonLinkFees(address,address)": {
            "params": {
              "feeToken": "The token to withdraw",
              "to": "The address to send the tokens to"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "acceptOwnership()": {
            "notice": "Allows an ownership transfer to be completed by the recipient."
          },
          "applyAllowListUpdates(address[],address[])": {
            "notice": "Apply updates to the allow list."
          },
          "applyPoolUpdates((address,address)[],(address,address)[])": {
            "notice": "Adds and removed token pools."
          },
          "currentRateLimiterState()": {
            "notice": "Gets the token bucket with its values for the block it was requested at."
          },
          "forwardFromRouter((bytes,bytes,(address,uint256)[],address,bytes),uint256,address)": {
            "notice": "Send a message to the remote chain"
          },
          "getAllowList()": {
            "notice": "Gets the allowed addresses."
          },
          "getAllowListEnabled()": {
            "notice": "Gets whether the allowList functionality is enabled."
          },
          "getDynamicConfig()": {
            "notice": "Returns the dynamic onRamp config."
          },
          "getExpectedNextSequenceNumber()": {
            "notice": "Gets the next sequence number to be used in the onRamp"
          },
          "getFee((bytes,bytes,(address,uint256)[],address,bytes))": {
            "notice": "Get the fee for a given ccip message"
          },
          "getFeeTokenConfig(address)": {
            "notice": "Gets the fee configuration for a token"
          },
          "getNopFeesJuels()": {
            "notice": "Get the total amount of fees to be paid to the Nops (in LINK)"
          },
          "getNops()": {
            "notice": "Gets the Nops and their weights"
          },
          "getPoolBySourceToken(address)": {
            "notice": "Get the pool for a specific token"
          },
          "getSenderNonce(address)": {
            "notice": "Get the next nonce for a given sender"
          },
          "getStaticConfig()": {
            "notice": "Returns the static onRamp config."
          },
          "getSupportedTokens()": {
            "notice": "Gets a list of all supported source chain tokens."
          },
          "getTokenLimitAdmin()": {
            "notice": "Gets the token limit admin address."
          },
          "getTokenTransferFeeConfig(address)": {
            "notice": "Gets the transfer fee config for a given token."
          },
          "linkAvailableForPayment()": {
            "notice": "Allow keeper to monitor funds available for paying nops"
          },
          "owner()": {
            "notice": "Get the current owner"
          },
          "payNops()": {
            "notice": "Pays the Node Ops their outstanding balances."
          },
          "setAdmin(address)": {
            "notice": "Sets the token limit admin address."
          },
          "setAllowListEnabled(bool)": {
            "notice": "Enables or disabled the allowList functionality."
          },
          "setDynamicConfig((address,uint16,uint32,uint16,address,uint32,uint64))": {
            "notice": "Sets the dynamic configuration."
          },
          "setFeeTokenConfig((address,uint32,uint32,uint32,uint64,uint64,bool)[])": {
            "notice": "Sets the fee configuration for a token"
          },
          "setNops((address,uint16)[])": {
            "notice": "Sets the Nops and their weights"
          },
          "setRateLimiterConfig((bool,uint128,uint128))": {
            "notice": "Sets the rate limited config."
          },
          "setTokenTransferFeeConfig((address,uint16,uint32)[])": {
            "notice": "Sets the transfer fee config."
          },
          "transferOwnership(address)": {
            "notice": "Allows an owner to begin transferring ownership to a new address, pending."
          },
          "withdrawNonLinkFees(address,address)": {
            "notice": "Allows the owner to withdraw any ERC20 token that is not the fee token"
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@eth-optimism/=node_modules/@eth-optimism/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "ds-test/=foundry-lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=foundry-lib/forge-std/src/",
        "hardhat/=node_modules/hardhat/",
        "openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 26000
      },
      "metadata": {
        "bytecodeHash": "none"
      },
      "compilationTarget": {
        "src/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol": "EVM2EVMOnRamp"
      },
      "libraries": {}
    },
    "sources": {
      "src/v0.8/ccip/AggregateRateLimiter.sol": {
        "keccak256": "0xbb8db62d2ffc22469a7b0807689b9e5a4d8cff2124d3a8f3a487901d65093c86",
        "urls": [
          "bzz-raw://548fb5dacaa4381dbd30b0b8e91434de6e3d33bdbaf246e9c68ecf9151ad0550",
          "dweb:/ipfs/Qmdm5J9xE6Bsn4PZctbETGXfVvMd3vLWLNG6Xu8zTZKWt7"
        ],
        "license": "BUSL-1.1"
      },
      "src/v0.8/ccip/interfaces/IARM.sol": {
        "keccak256": "0x7d0609f6b36bce268df88bb6b525d1b53033f5ad443579a22f06ba92974f89cb",
        "urls": [
          "bzz-raw://9899c4237f92f635ed23f8403963091c996dcc2d5bac540f5cb0010b95246429",
          "dweb:/ipfs/QmSri7Q36D5UCPRvDoCFr9RJYQKLKr9188wRxrVYyADVH4"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/interfaces/IEVM2AnyOnRamp.sol": {
        "keccak256": "0x96b8910f163f85e2b5a4844c46128b6bb37f72990ab20ffe5ce7a3b36a87e470",
        "urls": [
          "bzz-raw://794bf5a43506181bc224a7fa598522fd6af2c87371272e51421cbc00be32039c",
          "dweb:/ipfs/QmcwzEVQ6WEKYJzLfZz7hgzjaQnFAf9LnjBXJLLhxQRvA6"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/interfaces/IPriceRegistry.sol": {
        "keccak256": "0x98df90564b54f655220bc2591f82d596ac450a34036d422eac133e445aab8607",
        "urls": [
          "bzz-raw://58cfa2fb7260e9cb91dd417da0c5102e27fefdad807f6e147a0edd455082c4f0",
          "dweb:/ipfs/QmbfBD1aJkZKp4X34BXU8jxgUY7s5cxYxM9XeP2gM9rTP8"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/interfaces/automation/ILinkAvailable.sol": {
        "keccak256": "0x0df7f0e782851418610088ee580fcb0eea4004d6cf2f3f8c9e687c52035de31e",
        "urls": [
          "bzz-raw://e59b4a34457b386b22544c3f5936a1057d392e32ed0981ce466daa659b98fb77",
          "dweb:/ipfs/QmcT6Q1jfD4fy3br941Ay7SoXKpwj1yP4qidd6EV2q1531"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/interfaces/pools/IPool.sol": {
        "keccak256": "0xd1304829f4a2f244935c2825bb963a2ce885d67716a8286d2e09230679cae840",
        "urls": [
          "bzz-raw://0e0cc32b9a6e49b56ebf8231e173c650b29cb83b8d47cbf186564cb5cf4c9e7e",
          "dweb:/ipfs/QmawsMRBgPHyRifjqsY9iw7ebMkzJsKHvDHahYa9A1kLDZ"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/libraries/Client.sol": {
        "keccak256": "0x01d88151b2e0b675c7cd89f9dcdc1d9c92332be74938c1cedfe05e910a7cbddc",
        "urls": [
          "bzz-raw://939fabf11f282fdcf26342965c824b77f7bb190468f9206535a870371ffd87c5",
          "dweb:/ipfs/QmXHSWmPbVhMcYLokmvrqTxgQtVjoqzMES4RrbxyJk8s3a"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/libraries/Internal.sol": {
        "keccak256": "0x785e08a813588a932c3d84dbfbd9e2f75c0ea6efa1246aa543c3e7236de8434b",
        "urls": [
          "bzz-raw://608d4d9a05b1ceda602ff27051743c56732770abc2b2d77343035c6c8b67e717",
          "dweb:/ipfs/QmcHZyGVZNgw3ueW5coQh66afd8WwLKLYMUKpdcwqctHKf"
        ],
        "license": "MIT"
      },
      "src/v0.8/ccip/libraries/MerkleMultiProof.sol": {
        "keccak256": "0x9f2e5edd718cd1b5aa7143ca39ee50d7c15b8456ce32c49c10833c9ef3b0eb72",
        "urls": [
          "bzz-raw://c2591501ed4b28164009e58166324634a0ce79a0599ee682d47d825f302a9955",
          "dweb:/ipfs/QmeN35m4PFQDBc1ew2Q5koYNfchf8DcTemUmXVFVSuZV5t"
        ],
        "license": "BUSL-1.1"
      },
      "src/v0.8/ccip/libraries/RateLimiter.sol": {
        "keccak256": "0x954918ef682644488459befbbbeef4f0b8f45873b38ace197af43bf619fdf4d8",
        "urls": [
          "bzz-raw://232e49fc42d7397a43787269179f1b99e08e1907161b927c09103921379b2bda",
          "dweb:/ipfs/QmRTHcs9Uuc7W2gBSssonEp9fUcrTfckEEKh4RQERBWJ2S"
        ],
        "license": "BUSL-1.1"
      },
      "src/v0.8/ccip/libraries/USDPriceWith18Decimals.sol": {
        "keccak256": "0x1eb3b2aa151153c6133a50e525090fb46001cfe0a10ae158cc68f6721f060ffa",
        "urls": [
          "bzz-raw://5a7a9525db27647c62db31c382026f405d5025ce35631a1bbae34b09a1eff3d9",
          "dweb:/ipfs/QmSAFAumowR8FnSs6GHCq9mdUP67XSZeh7APYmaKDccSfi"
        ],
        "license": "BUSL-1.1"
      },
      "src/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol": {
        "keccak256": "0xf5c4f98bc320104a7e2437c37b6c3ce9747e00564aa3c961ecca6b1383f42e4d",
        "urls": [
          "bzz-raw://cd1922939b3705b6b15ae1adbb2aac7c510a5e43b7ed8b161b6aa0f5ce2d972e",
          "dweb:/ipfs/QmWgEoiRvFU1o5brNHqwveme7UJBm1SpJoPJ6cS6QPmczJ"
        ],
        "license": "BUSL-1.1"
      },
      "src/v0.8/interfaces/TypeAndVersionInterface.sol": {
        "keccak256": "0x805cc9a91d54db1bea60cb19f38364f1eac2735bddb3476294fb803c2f6b7097",
        "urls": [
          "bzz-raw://05762f3335bb50fde2ece5ffbb735f22db35dc9489ea4716a4e731aa0aeee1e1",
          "dweb:/ipfs/QmNu4sZk9T8PZYMn2BvxECF911hAviCjE2T846Zir8H7RB"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/access/ConfirmedOwner.sol": {
        "keccak256": "0x99d0b0786fe368970009c703f2249bfbc56340ddf1a28b60d2915bb58c34cd72",
        "urls": [
          "bzz-raw://af0371c1af45db651823b9a3d5af761b08243c78f105166342eee28de356c8dd",
          "dweb:/ipfs/QmPnC9qNDKwJFd5unwLb9pxjrutoe8MWjm5EXHTxq2kJ4x"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol": {
        "keccak256": "0x215529a99534a40e6257ef2282a91ea4a95b66debc3997866406907622efb405",
        "urls": [
          "bzz-raw://ecc56a2cddb1ba6225ca0cffb07fdf6e24bcc4234cc87710c42a59c0a21ae395",
          "dweb:/ipfs/QmSpW4vkPHeRNZ14beMEk2LEtqY5JQTueNJC4sCT8JaSoc"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/access/OwnerIsCreator.sol": {
        "keccak256": "0x895af02d6a3df2930bbb6ec1f2d68118b492ca6e710ba0c34fcb6b574a0906aa",
        "urls": [
          "bzz-raw://c4c69fab5eea1c0448f856a51d7e5736454fe5cc083d36c60bf3ee23bb3d0e8e",
          "dweb:/ipfs/QmP4fYQ9k7xeZms6cwnqnQuuAkRkeE2TWewyvCD8Mrc2DZ"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/enumerable/EnumerableMapAddresses.sol": {
        "keccak256": "0x0bd57d416b274af3098432564d2f124f718b81712b0e05fea10a63c52768893e",
        "urls": [
          "bzz-raw://8c1644c70d8fd923ed94abdc0c49665414317b793b7a9b6d328fe45a2c72dbc3",
          "dweb:/ipfs/QmY1jf2UKfzNzCJL6UEegMyiMhbJEBRkijMQmsTwbLWjfU"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/interfaces/IOwnable.sol": {
        "keccak256": "0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767",
        "urls": [
          "bzz-raw://17c636625a5d29a140612db496d2cca9fb4b48c673adb0fd7b3957d287e75921",
          "dweb:/ipfs/QmNoBX8TY424bdQWyQC7y3kpKfgxyWxhLw7KEhhEEoBN9q"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x527e858729af8197f6c8f99554d32bfc4f5a72b15975489c94809363d7ae522f",
        "urls": [
          "bzz-raw://6828dfa867eaff18f383aad4ca4b5aaedb93109023d74aaf418fee6c06e556c2",
          "dweb:/ipfs/QmXSQ9WnaJ6Ba9gvKvgNxDY7sa7ATJ9V55uwGSGCpBuJKu"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
        "keccak256": "0x28d267ba89cbaca4a86577add59f1a18842ca6e7d80a05f3dbf52127928a5e2c",
        "urls": [
          "bzz-raw://67a26777e88ae78952713f4479ca3126db804dc9ce1a85f079ec067393a6275d",
          "dweb:/ipfs/QmNLxBkkA6os8W9vUeCsjcFsMkGhtqAZrGjPuoACTqVhbh"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0x19d64e8f5fa895ab2625917111fd9f316d4f9314239f0712fd6dc2f5bff9d0c9",
        "urls": [
          "bzz-raw://14de158ff9e64ebeac381bba59fe3500b48853063cfb27343090a3f710795fee",
          "dweb:/ipfs/QmQJE5SfDfgy8aKENnsjW4t9P4bmTSnujotFmnXnrwpfzQ"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/Address.sol": {
        "keccak256": "0x172a09a55d730f20a9bb309086a4ad06b17c612151f58bab2b44efe78d583d4e",
        "urls": [
          "bzz-raw://1f812456ddd112f09606bfc5965c6e643558d740264273017ad556122502b4e2",
          "dweb:/ipfs/QmdWE4wncanz9Lhu5ESgSo14jAR74Ss5puCM5zUGonATLw"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableMap.sol": {
        "keccak256": "0x68fb09424d69c771ebaeb5a425bcbdbb0725a236c0d83d517992b6f44bd7198d",
        "urls": [
          "bzz-raw://c3a036ba98e5d58911511b85abd620e1d8de7d203ab2a48b2a3d827710847df4",
          "dweb:/ipfs/QmNWrWgkfsk1AoLpWKDkbHu5CZmzEcGzrT74Ug46phm4p5"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableSet.sol": {
        "keccak256": "0x9ec0d82ee53d4137be44f1f38f9a82d0d3a2027b3b8b226a5a90e4ee76e926d6",
        "urls": [
          "bzz-raw://f783b453420dee16bb4f0839e3d2485d753d2dcd317adbeecb7e510c39563f57",
          "dweb:/ipfs/QmUd4BeCaw6ZujaYvvMrCn2BNqmiP4bt4eA9rxiXY5od5E"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/v0.8/ccip/onRamp/EVM2EVMOnRamp.sol",
    "id": 56000,
    "exportedSymbols": {
      "AggregateRateLimiter": [
        45485
      ],
      "Client": [
        49480
      ],
      "EVM2EVMOnRamp": [
        55999
      ],
      "EnumerableMap": [
        105406
      ],
      "EnumerableMapAddresses": [
        101882
      ],
      "EnumerableSet": [
        106019
      ],
      "IARM": [
        49092
      ],
      "IERC20": [
        103340
      ],
      "IEVM2AnyOnRamp": [
        49215
      ],
      "ILinkAvailable": [
        49383
      ],
      "IPool": [
        49425
      ],
      "IPriceRegistry": [
        49288
      ],
      "Internal": [
        49641
      ],
      "RateLimiter": [
        50317
      ],
      "SafeERC20": [
        103726
      ],
      "TypeAndVersionInterface": [
        101478
      ],
      "USDPriceWith18Decimals": [
        50356
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:38660:49",
    "nodes": [
      {
        "id": 53680,
        "nodeType": "PragmaDirective",
        "src": "37:23:49",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".19"
        ]
      },
      {
        "id": 53682,
        "nodeType": "ImportDirective",
        "src": "62:85:49",
        "nodes": [],
        "absolutePath": "src/v0.8/interfaces/TypeAndVersionInterface.sol",
        "file": "../../interfaces/TypeAndVersionInterface.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 101479,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53681,
              "name": "TypeAndVersionInterface",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 101478,
              "src": "70:23:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53684,
        "nodeType": "ImportDirective",
        "src": "148:52:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/interfaces/pools/IPool.sol",
        "file": "../interfaces/pools/IPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49426,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53683,
              "name": "IPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49425,
              "src": "156:5:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53686,
        "nodeType": "ImportDirective",
        "src": "201:44:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/interfaces/IARM.sol",
        "file": "../interfaces/IARM.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49093,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53685,
              "name": "IARM",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49092,
              "src": "209:4:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53688,
        "nodeType": "ImportDirective",
        "src": "246:64:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/interfaces/IPriceRegistry.sol",
        "file": "../interfaces/IPriceRegistry.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49289,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53687,
              "name": "IPriceRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49288,
              "src": "254:14:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53690,
        "nodeType": "ImportDirective",
        "src": "311:64:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/interfaces/IEVM2AnyOnRamp.sol",
        "file": "../interfaces/IEVM2AnyOnRamp.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49216,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53689,
              "name": "IEVM2AnyOnRamp",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49215,
              "src": "319:14:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53692,
        "nodeType": "ImportDirective",
        "src": "376:75:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/interfaces/automation/ILinkAvailable.sol",
        "file": "../interfaces/automation/ILinkAvailable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49384,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53691,
              "name": "ILinkAvailable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49383,
              "src": "384:14:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53694,
        "nodeType": "ImportDirective",
        "src": "453:65:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/AggregateRateLimiter.sol",
        "file": "../AggregateRateLimiter.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 45486,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53693,
              "name": "AggregateRateLimiter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45485,
              "src": "461:20:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53696,
        "nodeType": "ImportDirective",
        "src": "519:47:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/libraries/Client.sol",
        "file": "../libraries/Client.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49481,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53695,
              "name": "Client",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49480,
              "src": "527:6:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53698,
        "nodeType": "ImportDirective",
        "src": "567:51:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/libraries/Internal.sol",
        "file": "../libraries/Internal.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 49642,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53697,
              "name": "Internal",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 49641,
              "src": "575:8:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53700,
        "nodeType": "ImportDirective",
        "src": "619:57:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/libraries/RateLimiter.sol",
        "file": "../libraries/RateLimiter.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 50318,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53699,
              "name": "RateLimiter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 50317,
              "src": "627:11:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53702,
        "nodeType": "ImportDirective",
        "src": "677:79:49",
        "nodes": [],
        "absolutePath": "src/v0.8/ccip/libraries/USDPriceWith18Decimals.sol",
        "file": "../libraries/USDPriceWith18Decimals.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 50357,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53701,
              "name": "USDPriceWith18Decimals",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 50356,
              "src": "685:22:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53704,
        "nodeType": "ImportDirective",
        "src": "757:90:49",
        "nodes": [],
        "absolutePath": "src/v0.8/shared/enumerable/EnumerableMapAddresses.sol",
        "file": "../../shared/enumerable/EnumerableMapAddresses.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 101883,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53703,
              "name": "EnumerableMapAddresses",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 101882,
              "src": "765:22:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53706,
        "nodeType": "ImportDirective",
        "src": "849:110:49",
        "nodes": [],
        "absolutePath": "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "../../vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/utils/SafeERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 103727,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53705,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 103726,
              "src": "857:9:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53708,
        "nodeType": "ImportDirective",
        "src": "960:98:49",
        "nodes": [],
        "absolutePath": "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/IERC20.sol",
        "file": "../../vendor/openzeppelin-solidity/v4.8.0/contracts/token/ERC20/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 103341,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53707,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 103340,
              "src": "968:6:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53710,
        "nodeType": "ImportDirective",
        "src": "1059:114:49",
        "nodes": [],
        "absolutePath": "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableSet.sol",
        "file": "../../vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableSet.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 106020,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53709,
              "name": "EnumerableSet",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 106019,
              "src": "1067:13:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53712,
        "nodeType": "ImportDirective",
        "src": "1174:114:49",
        "nodes": [],
        "absolutePath": "src/v0.8/vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableMap.sol",
        "file": "../../vendor/openzeppelin-solidity/v4.8.0/contracts/utils/structs/EnumerableMap.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 56000,
        "sourceUnit": 105407,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53711,
              "name": "EnumerableMap",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 105406,
              "src": "1182:13:49",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 55999,
        "nodeType": "ContractDefinition",
        "src": "1585:37111:49",
        "nodes": [
          {
            "id": 53725,
            "nodeType": "UsingForDirective",
            "src": "1693:27:49",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53722,
              "name": "SafeERC20",
              "nameLocations": [
                "1699:9:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 103726,
              "src": "1699:9:49"
            },
            "typeName": {
              "id": 53724,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53723,
                "name": "IERC20",
                "nameLocations": [
                  "1713:6:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 103340,
                "src": "1713:6:49"
              },
              "referencedDeclaration": 103340,
              "src": "1713:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$103340",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 53729,
            "nodeType": "UsingForDirective",
            "src": "1723:55:49",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53726,
              "name": "EnumerableMap",
              "nameLocations": [
                "1729:13:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 105406,
              "src": "1729:13:49"
            },
            "typeName": {
              "id": 53728,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53727,
                "name": "EnumerableMap.AddressToUintMap",
                "nameLocations": [
                  "1747:13:49",
                  "1761:16:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 104974,
                "src": "1747:30:49"
              },
              "referencedDeclaration": 104974,
              "src": "1747:30:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage_ptr",
                "typeString": "struct EnumerableMap.AddressToUintMap"
              }
            }
          },
          {
            "id": 53733,
            "nodeType": "UsingForDirective",
            "src": "1781:76:49",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53730,
              "name": "EnumerableMapAddresses",
              "nameLocations": [
                "1787:22:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 101882,
              "src": "1787:22:49"
            },
            "typeName": {
              "id": 53732,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53731,
                "name": "EnumerableMapAddresses.AddressToAddressMap",
                "nameLocations": [
                  "1814:22:49",
                  "1837:19:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 101688,
                "src": "1814:42:49"
              },
              "referencedDeclaration": 101688,
              "src": "1814:42:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage_ptr",
                "typeString": "struct EnumerableMapAddresses.AddressToAddressMap"
              }
            }
          },
          {
            "id": 53737,
            "nodeType": "UsingForDirective",
            "src": "1860:49:49",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53734,
              "name": "EnumerableSet",
              "nameLocations": [
                "1866:13:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 106019,
              "src": "1866:13:49"
            },
            "typeName": {
              "id": 53736,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53735,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "1884:13:49",
                  "1898:10:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 105732,
                "src": "1884:24:49"
              },
              "referencedDeclaration": 105732,
              "src": "1884:24:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$105732_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            }
          },
          {
            "id": 53740,
            "nodeType": "UsingForDirective",
            "src": "1912:41:49",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53738,
              "name": "USDPriceWith18Decimals",
              "nameLocations": [
                "1918:22:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 50356,
              "src": "1918:22:49"
            },
            "typeName": {
              "id": 53739,
              "name": "uint192",
              "nodeType": "ElementaryTypeName",
              "src": "1945:7:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint192",
                "typeString": "uint192"
              }
            }
          },
          {
            "id": 53742,
            "nodeType": "ErrorDefinition",
            "src": "1957:28:49",
            "nodes": [],
            "errorSelector": "5247fdce",
            "name": "InvalidExtraArgsTag",
            "nameLocation": "1963:19:49",
            "parameters": {
              "id": 53741,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1982:2:49"
            }
          },
          {
            "id": 53744,
            "nodeType": "ErrorDefinition",
            "src": "1988:35:49",
            "nodes": [],
            "errorSelector": "fbdb8e56",
            "name": "OnlyCallableByOwnerOrAdmin",
            "nameLocation": "1994:26:49",
            "parameters": {
              "id": 53743,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2020:2:49"
            }
          },
          {
            "id": 53746,
            "nodeType": "ErrorDefinition",
            "src": "2026:40:49",
            "nodes": [],
            "errorSelector": "195db958",
            "name": "OnlyCallableByOwnerOrAdminOrNop",
            "nameLocation": "2032:31:49",
            "parameters": {
              "id": 53745,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2063:2:49"
            }
          },
          {
            "id": 53748,
            "nodeType": "ErrorDefinition",
            "src": "2069:30:49",
            "nodes": [],
            "errorSelector": "232cb97f",
            "name": "InvalidWithdrawParams",
            "nameLocation": "2075:21:49",
            "parameters": {
              "id": 53747,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2096:2:49"
            }
          },
          {
            "id": 53750,
            "nodeType": "ErrorDefinition",
            "src": "2102:20:49",
            "nodes": [],
            "errorSelector": "8d0f71d8",
            "name": "NoFeesToPay",
            "nameLocation": "2108:11:49",
            "parameters": {
              "id": 53749,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2119:2:49"
            }
          },
          {
            "id": 53752,
            "nodeType": "ErrorDefinition",
            "src": "2125:20:49",
            "nodes": [],
            "errorSelector": "990e30bf",
            "name": "NoNopsToPay",
            "nameLocation": "2131:11:49",
            "parameters": {
              "id": 53751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2142:2:49"
            }
          },
          {
            "id": 53754,
            "nodeType": "ErrorDefinition",
            "src": "2148:28:49",
            "nodes": [],
            "errorSelector": "f4d678b8",
            "name": "InsufficientBalance",
            "nameLocation": "2154:19:49",
            "parameters": {
              "id": 53753,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2173:2:49"
            }
          },
          {
            "id": 53756,
            "nodeType": "ErrorDefinition",
            "src": "2179:20:49",
            "nodes": [],
            "errorSelector": "b5a10cfa",
            "name": "TooManyNops",
            "nameLocation": "2185:11:49",
            "parameters": {
              "id": 53755,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2196:2:49"
            }
          },
          {
            "id": 53758,
            "nodeType": "ErrorDefinition",
            "src": "2202:29:49",
            "nodes": [],
            "errorSelector": "e5c7a491",
            "name": "MaxFeeBalanceReached",
            "nameLocation": "2208:20:49",
            "parameters": {
              "id": 53757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2228:2:49"
            }
          },
          {
            "id": 53764,
            "nodeType": "ErrorDefinition",
            "src": "2234:59:49",
            "nodes": [],
            "errorSelector": "86933789",
            "name": "MessageTooLarge",
            "nameLocation": "2240:15:49",
            "parameters": {
              "id": 53763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53760,
                  "mutability": "mutable",
                  "name": "maxSize",
                  "nameLocation": "2264:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53764,
                  "src": "2256:15:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 53759,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2256:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53762,
                  "mutability": "mutable",
                  "name": "actualSize",
                  "nameLocation": "2281:10:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53764,
                  "src": "2273:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 53761,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2273:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2255:37:49"
            }
          },
          {
            "id": 53766,
            "nodeType": "ErrorDefinition",
            "src": "2296:31:49",
            "nodes": [],
            "errorSelector": "4c4fc93a",
            "name": "MessageGasLimitTooHigh",
            "nameLocation": "2302:22:49",
            "parameters": {
              "id": 53765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2324:2:49"
            }
          },
          {
            "id": 53768,
            "nodeType": "ErrorDefinition",
            "src": "2330:34:49",
            "nodes": [],
            "errorSelector": "4c056b6a",
            "name": "UnsupportedNumberOfTokens",
            "nameLocation": "2336:25:49",
            "parameters": {
              "id": 53767,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2361:2:49"
            }
          },
          {
            "id": 53773,
            "nodeType": "ErrorDefinition",
            "src": "2367:37:49",
            "nodes": [],
            "errorSelector": "bf16aab6",
            "name": "UnsupportedToken",
            "nameLocation": "2373:16:49",
            "parameters": {
              "id": 53772,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53771,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2397:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53773,
                  "src": "2390:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$103340",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 53770,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 53769,
                      "name": "IERC20",
                      "nameLocations": [
                        "2390:6:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 103340,
                      "src": "2390:6:49"
                    },
                    "referencedDeclaration": 103340,
                    "src": "2390:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$103340",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2389:14:49"
            }
          },
          {
            "id": 53775,
            "nodeType": "ErrorDefinition",
            "src": "2407:29:49",
            "nodes": [],
            "errorSelector": "1c0a3529",
            "name": "MustBeCalledByRouter",
            "nameLocation": "2413:20:49",
            "parameters": {
              "id": 53774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2433:2:49"
            }
          },
          {
            "id": 53777,
            "nodeType": "ErrorDefinition",
            "src": "2439:36:49",
            "nodes": [],
            "errorSelector": "a4ec7479",
            "name": "RouterMustSetOriginalSender",
            "nameLocation": "2445:27:49",
            "parameters": {
              "id": 53776,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2472:2:49"
            }
          },
          {
            "id": 53779,
            "nodeType": "ErrorDefinition",
            "src": "2478:31:49",
            "nodes": [],
            "errorSelector": "6c2a4180",
            "name": "InvalidTokenPoolConfig",
            "nameLocation": "2484:22:49",
            "parameters": {
              "id": 53778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2506:2:49"
            }
          },
          {
            "id": 53781,
            "nodeType": "ErrorDefinition",
            "src": "2512:25:49",
            "nodes": [],
            "errorSelector": "3caf4585",
            "name": "PoolAlreadyAdded",
            "nameLocation": "2518:16:49",
            "parameters": {
              "id": 53780,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2534:2:49"
            }
          },
          {
            "id": 53785,
            "nodeType": "ErrorDefinition",
            "src": "2540:38:49",
            "nodes": [],
            "errorSelector": "73913ebd",
            "name": "PoolDoesNotExist",
            "nameLocation": "2546:16:49",
            "parameters": {
              "id": 53784,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53783,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2571:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53785,
                  "src": "2563:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53782,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2563:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2562:15:49"
            }
          },
          {
            "id": 53787,
            "nodeType": "ErrorDefinition",
            "src": "2581:26:49",
            "nodes": [],
            "errorSelector": "6cc7b998",
            "name": "TokenPoolMismatch",
            "nameLocation": "2587:17:49",
            "parameters": {
              "id": 53786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:2:49"
            }
          },
          {
            "id": 53791,
            "nodeType": "ErrorDefinition",
            "src": "2610:39:49",
            "nodes": [],
            "errorSelector": "d0d25976",
            "name": "SenderNotAllowed",
            "nameLocation": "2616:16:49",
            "parameters": {
              "id": 53790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53789,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2641:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53791,
                  "src": "2633:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2633:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2632:16:49"
            }
          },
          {
            "id": 53793,
            "nodeType": "ErrorDefinition",
            "src": "2652:22:49",
            "nodes": [],
            "errorSelector": "35be3ac8",
            "name": "InvalidConfig",
            "nameLocation": "2658:13:49",
            "parameters": {
              "id": 53792,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2671:2:49"
            }
          },
          {
            "id": 53797,
            "nodeType": "ErrorDefinition",
            "src": "2677:43:49",
            "nodes": [],
            "errorSelector": "370d875f",
            "name": "InvalidAddress",
            "nameLocation": "2683:14:49",
            "parameters": {
              "id": 53796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53795,
                  "mutability": "mutable",
                  "name": "encodedAddress",
                  "nameLocation": "2704:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53797,
                  "src": "2698:20:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 53794,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2698:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2697:22:49"
            }
          },
          {
            "id": 53799,
            "nodeType": "ErrorDefinition",
            "src": "2723:21:49",
            "nodes": [],
            "errorSelector": "c1483715",
            "name": "BadARMSignal",
            "nameLocation": "2729:12:49",
            "parameters": {
              "id": 53798,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2741:2:49"
            }
          },
          {
            "id": 53801,
            "nodeType": "ErrorDefinition",
            "src": "2747:30:49",
            "nodes": [],
            "errorSelector": "02075e00",
            "name": "LinkBalanceNotSettled",
            "nameLocation": "2753:21:49",
            "parameters": {
              "id": 53800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2774:2:49"
            }
          },
          {
            "id": 53805,
            "nodeType": "ErrorDefinition",
            "src": "2780:37:49",
            "nodes": [],
            "errorSelector": "4de938d1",
            "name": "InvalidNopAddress",
            "nameLocation": "2786:17:49",
            "parameters": {
              "id": 53804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53803,
                  "mutability": "mutable",
                  "name": "nop",
                  "nameLocation": "2812:3:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53805,
                  "src": "2804:11:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2804:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2803:13:49"
            }
          },
          {
            "id": 53809,
            "nodeType": "ErrorDefinition",
            "src": "2820:34:49",
            "nodes": [],
            "errorSelector": "a7499d20",
            "name": "NotAFeeToken",
            "nameLocation": "2826:12:49",
            "parameters": {
              "id": 53808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53807,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2847:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53809,
                  "src": "2839:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2839:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2838:15:49"
            }
          },
          {
            "id": 53813,
            "nodeType": "EventDefinition",
            "src": "2858:35:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8",
            "name": "AllowListAdd",
            "nameLocation": "2864:12:49",
            "parameters": {
              "id": 53812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53811,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2885:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53813,
                  "src": "2877:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2877:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2876:16:49"
            }
          },
          {
            "id": 53817,
            "nodeType": "EventDefinition",
            "src": "2896:38:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566",
            "name": "AllowListRemove",
            "nameLocation": "2902:15:49",
            "parameters": {
              "id": 53816,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53815,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2926:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53817,
                  "src": "2918:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53814,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2918:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2917:16:49"
            }
          },
          {
            "id": 53821,
            "nodeType": "EventDefinition",
            "src": "2937:40:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "ccf4daf6ab6430389f26b970595dab82a5881ad454770907e415ede27c8df032",
            "name": "AllowListEnabledSet",
            "nameLocation": "2943:19:49",
            "parameters": {
              "id": 53820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53819,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "enabled",
                  "nameLocation": "2968:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53821,
                  "src": "2963:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 53818,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2963:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2962:14:49"
            }
          },
          {
            "id": 53829,
            "nodeType": "EventDefinition",
            "src": "2980:72:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "72c6aaba4dde02f77d291123a76185c418ba63f8c217a2d56b08aec84e9bbfb8",
            "name": "ConfigSet",
            "nameLocation": "2986:9:49",
            "parameters": {
              "id": 53828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53824,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "staticConfig",
                  "nameLocation": "3009:12:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53829,
                  "src": "2996:25:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                  },
                  "typeName": {
                    "id": 53823,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 53822,
                      "name": "StaticConfig",
                      "nameLocations": [
                        "2996:12:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53887,
                      "src": "2996:12:49"
                    },
                    "referencedDeclaration": 53887,
                    "src": "2996:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_StaticConfig_$53887_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53827,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dynamicConfig",
                  "nameLocation": "3037:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53829,
                  "src": "3023:27:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                  },
                  "typeName": {
                    "id": 53826,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 53825,
                      "name": "DynamicConfig",
                      "nameLocations": [
                        "3023:13:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53902,
                      "src": "3023:13:49"
                    },
                    "referencedDeclaration": 53902,
                    "src": "3023:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2995:56:49"
            }
          },
          {
            "id": 53835,
            "nodeType": "EventDefinition",
            "src": "3055:51:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f",
            "name": "NopPaid",
            "nameLocation": "3061:7:49",
            "parameters": {
              "id": 53834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53831,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "nop",
                  "nameLocation": "3085:3:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53835,
                  "src": "3069:19:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3069:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53833,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3098:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53835,
                  "src": "3090:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 53832,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3090:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3068:37:49"
            }
          },
          {
            "id": 53841,
            "nodeType": "EventDefinition",
            "src": "3109:51:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8",
            "name": "FeeConfigSet",
            "nameLocation": "3115:12:49",
            "parameters": {
              "id": 53840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53839,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "feeConfig",
                  "nameLocation": "3149:9:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53841,
                  "src": "3128:30:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 53837,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 53836,
                        "name": "FeeTokenConfigArgs",
                        "nameLocations": [
                          "3128:18:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53930,
                        "src": "3128:18:49"
                      },
                      "referencedDeclaration": 53930,
                      "src": "3128:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                      }
                    },
                    "id": 53838,
                    "nodeType": "ArrayTypeName",
                    "src": "3128:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3127:32:49"
            }
          },
          {
            "id": 53847,
            "nodeType": "EventDefinition",
            "src": "3163:80:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "4230c60a9725eb5fb992cf6a215398b4e81b4606d4a1e6be8dfe0b60dc172ec1",
            "name": "TokenTransferFeeConfigSet",
            "nameLocation": "3169:25:49",
            "parameters": {
              "id": 53846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53845,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "transferFeeConfig",
                  "nameLocation": "3224:17:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53847,
                  "src": "3195:46:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 53843,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 53842,
                        "name": "TokenTransferFeeConfigArgs",
                        "nameLocations": [
                          "3195:26:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53942,
                        "src": "3195:26:49"
                      },
                      "referencedDeclaration": 53942,
                      "src": "3195:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                      }
                    },
                    "id": 53844,
                    "nodeType": "ArrayTypeName",
                    "src": "3195:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3194:48:49"
            }
          },
          {
            "id": 53852,
            "nodeType": "EventDefinition",
            "src": "3246:57:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "affc45517195d6499808c643bd4a7b0ffeedf95bea5852840d7bfcf63f59e821",
            "name": "CCIPSendRequested",
            "nameLocation": "3252:17:49",
            "parameters": {
              "id": 53851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53850,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nameLocation": "3294:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53852,
                  "src": "3270:31:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                    "typeString": "struct Internal.EVM2EVMMessage"
                  },
                  "typeName": {
                    "id": 53849,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 53848,
                      "name": "Internal.EVM2EVMMessage",
                      "nameLocations": [
                        "3270:8:49",
                        "3279:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49551,
                      "src": "3270:23:49"
                    },
                    "referencedDeclaration": 49551,
                    "src": "3270:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_storage_ptr",
                      "typeString": "struct Internal.EVM2EVMMessage"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3269:33:49"
            }
          },
          {
            "id": 53860,
            "nodeType": "EventDefinition",
            "src": "3306:70:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd24",
            "name": "NopsSet",
            "nameLocation": "3312:7:49",
            "parameters": {
              "id": 53859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53854,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "nopWeightsTotal",
                  "nameLocation": "3328:15:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53860,
                  "src": "3320:23:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 53853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3320:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53858,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "nopsAndWeights",
                  "nameLocation": "3360:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53860,
                  "src": "3345:29:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 53856,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 53855,
                        "name": "NopAndWeight",
                        "nameLocations": [
                          "3345:12:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53947,
                        "src": "3345:12:49"
                      },
                      "referencedDeclaration": 53947,
                      "src": "3345:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                      }
                    },
                    "id": 53857,
                    "nodeType": "ArrayTypeName",
                    "src": "3345:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3319:56:49"
            }
          },
          {
            "id": 53866,
            "nodeType": "EventDefinition",
            "src": "3379:45:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c",
            "name": "PoolAdded",
            "nameLocation": "3385:9:49",
            "parameters": {
              "id": 53865,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53862,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "3403:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53866,
                  "src": "3395:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3395:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53864,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "3418:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53866,
                  "src": "3410:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53863,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3410:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3394:29:49"
            }
          },
          {
            "id": 53872,
            "nodeType": "EventDefinition",
            "src": "3427:47:49",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c",
            "name": "PoolRemoved",
            "nameLocation": "3433:11:49",
            "parameters": {
              "id": 53871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53868,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "3453:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53872,
                  "src": "3445:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53867,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3445:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 53870,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "3468:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 53872,
                  "src": "3460:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53869,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3460:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3444:29:49"
            }
          },
          {
            "id": 53887,
            "nodeType": "StructDefinition",
            "src": "3535:470:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.StaticConfig",
            "members": [
              {
                "constant": false,
                "id": 53874,
                "mutability": "mutable",
                "name": "linkToken",
                "nameLocation": "3569:9:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3561:17:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53873,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3561:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53876,
                "mutability": "mutable",
                "name": "chainSelector",
                "nameLocation": "3625:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3618:20:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53875,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3618:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53878,
                "mutability": "mutable",
                "name": "destChainSelector",
                "nameLocation": "3684:17:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3677:24:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53877,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3677:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53880,
                "mutability": "mutable",
                "name": "defaultTxGasLimit",
                "nameLocation": "3748:17:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3741:24:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53879,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3741:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53882,
                "mutability": "mutable",
                "name": "maxNopFeesJuels",
                "nameLocation": "3811:15:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3804:22:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 53881,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "3804:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53884,
                "mutability": "mutable",
                "name": "prevOnRamp",
                "nameLocation": "3886:10:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3878:18:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53883,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3878:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53886,
                "mutability": "mutable",
                "name": "armProxy",
                "nameLocation": "3957:8:49",
                "nodeType": "VariableDeclaration",
                "scope": 53887,
                "src": "3949:16:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53885,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3949:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "StaticConfig",
            "nameLocation": "3542:12:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53902,
            "nodeType": "StructDefinition",
            "src": "4065:595:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.DynamicConfig",
            "members": [
              {
                "constant": false,
                "id": 53889,
                "mutability": "mutable",
                "name": "router",
                "nameLocation": "4100:6:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4092:14:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53888,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4092:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53891,
                "mutability": "mutable",
                "name": "maxTokensLength",
                "nameLocation": "4156:15:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4149:22:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 53890,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "4149:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53893,
                "mutability": "mutable",
                "name": "destGasOverhead",
                "nameLocation": "4269:15:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4262:22:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53892,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4262:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53895,
                "mutability": "mutable",
                "name": "destGasPerPayloadByte",
                "nameLocation": "4350:21:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4343:28:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 53894,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "4343:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53897,
                "mutability": "mutable",
                "name": "priceRegistry",
                "nameLocation": "4450:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4442:21:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53896,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4442:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53899,
                "mutability": "mutable",
                "name": "maxDataSize",
                "nameLocation": "4514:11:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4507:18:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53898,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4507:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53901,
                "mutability": "mutable",
                "name": "maxGasLimit",
                "nameLocation": "4580:11:49",
                "nodeType": "VariableDeclaration",
                "scope": 53902,
                "src": "4573:18:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53900,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "4573:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "DynamicConfig",
            "nameLocation": "4072:13:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53915,
            "nodeType": "StructDefinition",
            "src": "4738:624:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.FeeTokenConfig",
            "members": [
              {
                "constant": false,
                "id": 53904,
                "mutability": "mutable",
                "name": "networkFeeUSD",
                "nameLocation": "4773:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "4766:20:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53903,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4766:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53906,
                "mutability": "mutable",
                "name": "minTokenTransferFeeUSD",
                "nameLocation": "4881:22:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "4874:29:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53905,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4874:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53908,
                "mutability": "mutable",
                "name": "maxTokenTransferFeeUSD",
                "nameLocation": "4988:22:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "4981:29:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53907,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4981:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53910,
                "mutability": "mutable",
                "name": "gasMultiplier",
                "nameLocation": "5095:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "5088:20:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53909,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "5088:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53912,
                "mutability": "mutable",
                "name": "premiumMultiplier",
                "nameLocation": "5207:17:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "5200:24:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53911,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "5200:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53914,
                "mutability": "mutable",
                "name": "enabled",
                "nameLocation": "5290:7:49",
                "nodeType": "VariableDeclaration",
                "scope": 53915,
                "src": "5285:12:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 53913,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "5285:4:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "FeeTokenConfig",
            "nameLocation": "4745:14:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53930,
            "nodeType": "StructDefinition",
            "src": "5571:687:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.FeeTokenConfigArgs",
            "members": [
              {
                "constant": false,
                "id": 53917,
                "mutability": "mutable",
                "name": "token",
                "nameLocation": "5611:5:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "5603:13:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53916,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "5603:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53919,
                "mutability": "mutable",
                "name": "networkFeeUSD",
                "nameLocation": "5668:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "5661:20:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53918,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "5661:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53921,
                "mutability": "mutable",
                "name": "minTokenTransferFeeUSD",
                "nameLocation": "5774:22:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "5767:29:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53920,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "5767:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53923,
                "mutability": "mutable",
                "name": "maxTokenTransferFeeUSD",
                "nameLocation": "5881:22:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "5874:29:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53922,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "5874:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53925,
                "mutability": "mutable",
                "name": "gasMultiplier",
                "nameLocation": "5990:13:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "5983:20:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53924,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "5983:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53927,
                "mutability": "mutable",
                "name": "premiumMultiplier",
                "nameLocation": "6103:17:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "6096:24:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 53926,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "6096:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53929,
                "mutability": "mutable",
                "name": "enabled",
                "nameLocation": "6186:7:49",
                "nodeType": "VariableDeclaration",
                "scope": 53930,
                "src": "6181:12:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 53928,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "6181:4:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "FeeTokenConfigArgs",
            "nameLocation": "5578:18:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53935,
            "nodeType": "StructDefinition",
            "src": "6339:259:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.TokenTransferFeeConfig",
            "members": [
              {
                "constant": false,
                "id": 53932,
                "mutability": "mutable",
                "name": "ratio",
                "nameLocation": "6382:5:49",
                "nodeType": "VariableDeclaration",
                "scope": 53935,
                "src": "6375:12:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 53931,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "6375:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53934,
                "mutability": "mutable",
                "name": "destGasOverhead",
                "nameLocation": "6499:15:49",
                "nodeType": "VariableDeclaration",
                "scope": 53935,
                "src": "6492:22:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53933,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "6492:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "TokenTransferFeeConfig",
            "nameLocation": "6346:22:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53942,
            "nodeType": "StructDefinition",
            "src": "6737:315:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.TokenTransferFeeConfigArgs",
            "members": [
              {
                "constant": false,
                "id": 53937,
                "mutability": "mutable",
                "name": "token",
                "nameLocation": "6785:5:49",
                "nodeType": "VariableDeclaration",
                "scope": 53942,
                "src": "6777:13:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53936,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "6777:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53939,
                "mutability": "mutable",
                "name": "ratio",
                "nameLocation": "6838:5:49",
                "nodeType": "VariableDeclaration",
                "scope": 53942,
                "src": "6831:12:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 53938,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "6831:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53941,
                "mutability": "mutable",
                "name": "destGasOverhead",
                "nameLocation": "6953:15:49",
                "nodeType": "VariableDeclaration",
                "scope": 53942,
                "src": "6946:22:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 53940,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "6946:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "TokenTransferFeeConfigArgs",
            "nameLocation": "6744:26:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53947,
            "nodeType": "StructDefinition",
            "src": "7130:135:49",
            "nodes": [],
            "canonicalName": "EVM2EVMOnRamp.NopAndWeight",
            "members": [
              {
                "constant": false,
                "id": 53944,
                "mutability": "mutable",
                "name": "nop",
                "nameLocation": "7164:3:49",
                "nodeType": "VariableDeclaration",
                "scope": 53947,
                "src": "7156:11:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 53943,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "7156:7:49",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 53946,
                "mutability": "mutable",
                "name": "weight",
                "nameLocation": "7221:6:49",
                "nodeType": "VariableDeclaration",
                "scope": 53947,
                "src": "7214:13:49",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 53945,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "7214:6:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "NopAndWeight",
            "nameLocation": "7137:12:49",
            "scope": 55999,
            "visibility": "public"
          },
          {
            "id": 53951,
            "nodeType": "VariableDeclaration",
            "src": "7374:70:49",
            "nodes": [],
            "baseFunctions": [
              101477
            ],
            "constant": true,
            "functionSelector": "181f5a77",
            "mutability": "constant",
            "name": "typeAndVersion",
            "nameLocation": "7406:14:49",
            "overrides": {
              "id": 53949,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7397:8:49"
            },
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 53948,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "7374:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "45564d3245564d4f6e52616d7020312e312e30",
              "id": 53950,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "7423:21:49",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_de9db4f3879c7bbcefc84f65577147d1817fed62543cdf12dcd3575037a08e75",
                "typeString": "literal_string \"EVM2EVMOnRamp 1.1.0\""
              },
              "value": "EVM2EVMOnRamp 1.1.0"
            },
            "visibility": "public"
          },
          {
            "id": 53954,
            "nodeType": "VariableDeclaration",
            "src": "7807:41:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53952,
              "nodeType": "StructuredDocumentation",
              "src": "7448:356:49",
              "text": "@dev metadataHash is a lane-specific prefix for a message hash preimage which ensures global uniqueness\n Ensures that 2 identical messages sent to 2 different lanes will have a distinct hash.\n Must match the metadataHash used in computing leaf hashes offchain for the root committed in\n the commitStore and i_metadataHash in the offRamp."
            },
            "mutability": "immutable",
            "name": "i_metadataHash",
            "nameLocation": "7834:14:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 53953,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "7807:7:49",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53957,
            "nodeType": "VariableDeclaration",
            "src": "7957:45:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53955,
              "nodeType": "StructuredDocumentation",
              "src": "7852:102:49",
              "text": "@dev Default gas limit for a transactions that did not specify\n a gas limit in the extraArgs."
            },
            "mutability": "immutable",
            "name": "i_defaultTxGasLimit",
            "nameLocation": "7983:19:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 53956,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "7957:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53960,
            "nodeType": "VariableDeclaration",
            "src": "8068:43:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53958,
              "nodeType": "StructuredDocumentation",
              "src": "8006:59:49",
              "text": "@dev Maximum nop fee that can accumulate in this onramp"
            },
            "mutability": "immutable",
            "name": "i_maxNopFeesJuels",
            "nameLocation": "8094:17:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint96",
              "typeString": "uint96"
            },
            "typeName": {
              "id": 53959,
              "name": "uint96",
              "nodeType": "ElementaryTypeName",
              "src": "8068:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint96",
                "typeString": "uint96"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53963,
            "nodeType": "VariableDeclaration",
            "src": "8184:38:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53961,
              "nodeType": "StructuredDocumentation",
              "src": "8115:66:49",
              "text": "@dev The link token address - known to pay nops for their work"
            },
            "mutability": "immutable",
            "name": "i_linkToken",
            "nameLocation": "8211:11:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 53962,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "8184:7:49",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53966,
            "nodeType": "VariableDeclaration",
            "src": "8304:41:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53964,
              "nodeType": "StructuredDocumentation",
              "src": "8226:75:49",
              "text": "@dev The chain ID of the source chain that this contract is deployed to"
            },
            "mutability": "immutable",
            "name": "i_chainSelector",
            "nameLocation": "8330:15:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 53965,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "8304:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53969,
            "nodeType": "VariableDeclaration",
            "src": "8398:45:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53967,
              "nodeType": "StructuredDocumentation",
              "src": "8349:46:49",
              "text": "@dev The chain ID of the destination chain"
            },
            "mutability": "immutable",
            "name": "i_destChainSelector",
            "nameLocation": "8424:19:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 53968,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "8398:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53972,
            "nodeType": "VariableDeclaration",
            "src": "8598:39:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53970,
              "nodeType": "StructuredDocumentation",
              "src": "8447:148:49",
              "text": "@dev The address of previous-version OnRamp for this lane\n Used to be able to provide sequencing continuity during a zero downtime upgrade."
            },
            "mutability": "immutable",
            "name": "i_prevOnRamp",
            "nameLocation": "8625:12:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 53971,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "8598:7:49",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53975,
            "nodeType": "VariableDeclaration",
            "src": "8681:37:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53973,
              "nodeType": "StructuredDocumentation",
              "src": "8641:37:49",
              "text": "@dev The address of the arm proxy"
            },
            "mutability": "immutable",
            "name": "i_armProxy",
            "nameLocation": "8708:10:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 53974,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "8681:7:49",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53979,
            "nodeType": "VariableDeclaration",
            "src": "8846:48:49",
            "nodes": [],
            "constant": true,
            "documentation": {
              "id": 53976,
              "nodeType": "StructuredDocumentation",
              "src": "8722:121:49",
              "text": "@dev the maximum number of nops that can be configured at the same time.\n Used to bound gas for loops over nops."
            },
            "mutability": "constant",
            "name": "MAX_NUMBER_OF_NOPS",
            "nameLocation": "8871:18:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 53977,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "8846:7:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3634",
              "id": 53978,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "8892:2:49",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_64_by_1",
                "typeString": "int_const 64"
              },
              "value": "64"
            },
            "visibility": "private"
          },
          {
            "id": 53983,
            "nodeType": "VariableDeclaration",
            "src": "8956:38:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53980,
              "nodeType": "StructuredDocumentation",
              "src": "8919:34:49",
              "text": "@dev The config for the onRamp"
            },
            "mutability": "mutable",
            "name": "s_dynamicConfig",
            "nameLocation": "8979:15:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
              "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
            },
            "typeName": {
              "id": 53982,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53981,
                "name": "DynamicConfig",
                "nameLocations": [
                  "8956:13:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 53902,
                "src": "8956:13:49"
              },
              "referencedDeclaration": 53902,
              "src": "8956:13:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53987,
            "nodeType": "VariableDeclaration",
            "src": "9041:46:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53984,
              "nodeType": "StructuredDocumentation",
              "src": "8998:40:49",
              "text": "@dev (address nop => uint256 weight)"
            },
            "mutability": "mutable",
            "name": "s_nops",
            "nameLocation": "9081:6:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
              "typeString": "struct EnumerableMap.AddressToUintMap"
            },
            "typeName": {
              "id": 53986,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53985,
                "name": "EnumerableMap.AddressToUintMap",
                "nameLocations": [
                  "9041:13:49",
                  "9055:16:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 104974,
                "src": "9041:30:49"
              },
              "referencedDeclaration": 104974,
              "src": "9041:30:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage_ptr",
                "typeString": "struct EnumerableMap.AddressToUintMap"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53991,
            "nodeType": "VariableDeclaration",
            "src": "9129:71:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53988,
              "nodeType": "StructuredDocumentation",
              "src": "9091:35:49",
              "text": "@dev source token => token pool"
            },
            "mutability": "mutable",
            "name": "s_poolsBySourceToken",
            "nameLocation": "9180:20:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
              "typeString": "struct EnumerableMapAddresses.AddressToAddressMap"
            },
            "typeName": {
              "id": 53990,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53989,
                "name": "EnumerableMapAddresses.AddressToAddressMap",
                "nameLocations": [
                  "9129:22:49",
                  "9152:19:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 101688,
                "src": "9129:42:49"
              },
              "referencedDeclaration": 101688,
              "src": "9129:42:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage_ptr",
                "typeString": "struct EnumerableMapAddresses.AddressToAddressMap"
              }
            },
            "visibility": "private"
          },
          {
            "id": 53995,
            "nodeType": "VariableDeclaration",
            "src": "9266:44:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53992,
              "nodeType": "StructuredDocumentation",
              "src": "9205:58:49",
              "text": "@dev A set of addresses which can make ccipSend calls."
            },
            "mutability": "mutable",
            "name": "s_allowList",
            "nameLocation": "9299:11:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_AddressSet_$105732_storage",
              "typeString": "struct EnumerableSet.AddressSet"
            },
            "typeName": {
              "id": 53994,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53993,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "9266:13:49",
                  "9280:10:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 105732,
                "src": "9266:24:49"
              },
              "referencedDeclaration": 105732,
              "src": "9266:24:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$105732_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            },
            "visibility": "private"
          },
          {
            "id": 54001,
            "nodeType": "VariableDeclaration",
            "src": "9398:81:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 53996,
              "nodeType": "StructuredDocumentation",
              "src": "9314:81:49",
              "text": "@dev The execution fee token config that can be set by the owner or fee admin"
            },
            "mutability": "mutable",
            "name": "s_feeTokenConfig",
            "nameLocation": "9463:16:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_FeeTokenConfig_$53915_storage_$",
              "typeString": "mapping(address => struct EVM2EVMOnRamp.FeeTokenConfig)"
            },
            "typeName": {
              "id": 54000,
              "keyName": "token",
              "keyNameLocation": "9414:5:49",
              "keyType": {
                "id": 53997,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9406:7:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9398:55:49",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_FeeTokenConfig_$53915_storage_$",
                "typeString": "mapping(address => struct EVM2EVMOnRamp.FeeTokenConfig)"
              },
              "valueName": "feeTokenConfig",
              "valueNameLocation": "9438:14:49",
              "valueType": {
                "id": 53999,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 53998,
                  "name": "FeeTokenConfig",
                  "nameLocations": [
                    "9423:14:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53915,
                  "src": "9423:14:49"
                },
                "referencedDeclaration": 53915,
                "src": "9423:14:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage_ptr",
                  "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54007,
            "nodeType": "VariableDeclaration",
            "src": "9566:99:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54002,
              "nodeType": "StructuredDocumentation",
              "src": "9483:80:49",
              "text": "@dev The token transfer fee config that can be set by the owner or fee admin"
            },
            "mutability": "mutable",
            "name": "s_tokenTransferFeeConfig",
            "nameLocation": "9641:24:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenTransferFeeConfig_$53935_storage_$",
              "typeString": "mapping(address => struct EVM2EVMOnRamp.TokenTransferFeeConfig)"
            },
            "typeName": {
              "id": 54006,
              "keyName": "token",
              "keyNameLocation": "9582:5:49",
              "keyType": {
                "id": 54003,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9574:7:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9566:65:49",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenTransferFeeConfig_$53935_storage_$",
                "typeString": "mapping(address => struct EVM2EVMOnRamp.TokenTransferFeeConfig)"
              },
              "valueName": "tranferFeeConfig",
              "valueNameLocation": "9614:16:49",
              "valueType": {
                "id": 54005,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 54004,
                  "name": "TokenTransferFeeConfig",
                  "nameLocations": [
                    "9591:22:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53935,
                  "src": "9591:22:49"
                },
                "referencedDeclaration": 53935,
                "src": "9591:22:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage_ptr",
                  "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54012,
            "nodeType": "VariableDeclaration",
            "src": "9853:62:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54008,
              "nodeType": "StructuredDocumentation",
              "src": "9681:169:49",
              "text": "@dev The current nonce per sender.\n The offramp has a corresponding s_senderNonce mapping to ensure messages\n are executed in the same order they are sent."
            },
            "mutability": "mutable",
            "name": "s_senderNonce",
            "nameLocation": "9902:13:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
              "typeString": "mapping(address => uint64)"
            },
            "typeName": {
              "id": 54011,
              "keyName": "sender",
              "keyNameLocation": "9869:6:49",
              "keyType": {
                "id": 54009,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9861:7:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9853:39:49",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
                "typeString": "mapping(address => uint64)"
              },
              "valueName": "nonce",
              "valueNameLocation": "9886:5:49",
              "valueType": {
                "id": 54010,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "9879:6:49",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54015,
            "nodeType": "VariableDeclaration",
            "src": "9971:30:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54013,
              "nodeType": "StructuredDocumentation",
              "src": "9919:49:49",
              "text": "@dev The amount of LINK available to pay NOPS"
            },
            "mutability": "mutable",
            "name": "s_nopFeesJuels",
            "nameLocation": "9987:14:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint96",
              "typeString": "uint96"
            },
            "typeName": {
              "id": 54014,
              "name": "uint96",
              "nodeType": "ElementaryTypeName",
              "src": "9971:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint96",
                "typeString": "uint96"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54018,
            "nodeType": "VariableDeclaration",
            "src": "10056:33:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54016,
              "nodeType": "StructuredDocumentation",
              "src": "10005:48:49",
              "text": "@dev The combined weight of all NOPs weights"
            },
            "mutability": "mutable",
            "name": "s_nopWeightsTotal",
            "nameLocation": "10072:17:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 54017,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "10056:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54021,
            "nodeType": "VariableDeclaration",
            "src": "10268:32:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54019,
              "nodeType": "StructuredDocumentation",
              "src": "10093:172:49",
              "text": "@dev The last used sequence number. This is zero in the case where no\n messages has been sent yet. 0 is not a valid sequence number for any\n real transaction."
            },
            "mutability": "mutable",
            "name": "s_sequenceNumber",
            "nameLocation": "10284:16:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 54020,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "10268:6:49",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 54025,
            "nodeType": "VariableDeclaration",
            "src": "10352:29:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54022,
              "nodeType": "StructuredDocumentation",
              "src": "10304:45:49",
              "text": "@dev Whether this OnRamp is paused or not"
            },
            "mutability": "mutable",
            "name": "s_paused",
            "nameLocation": "10365:8:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 54023,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "10352:4:49",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "hexValue": "66616c7365",
              "id": 54024,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "10376:5:49",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "private"
          },
          {
            "id": 54028,
            "nodeType": "VariableDeclaration",
            "src": "10501:31:49",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 54026,
              "nodeType": "StructuredDocumentation",
              "src": "10385:113:49",
              "text": "@dev This allowListing will be removed before public launch\n @dev Whether s_allowList is enabled or not."
            },
            "mutability": "mutable",
            "name": "s_allowlistEnabled",
            "nameLocation": "10514:18:49",
            "scope": 55999,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 54027,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "10501:4:49",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "private"
          },
          {
            "id": 54195,
            "nodeType": "FunctionDefinition",
            "src": "10537:1640:49",
            "nodes": [],
            "body": {
              "id": 54194,
              "nodeType": "Block",
              "src": "10960:1217:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 54091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 54083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 54078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 54073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 54068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 54062,
                                "name": "staticConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54031,
                                "src": "10977:12:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                                }
                              },
                              "id": 54063,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10990:9:49",
                              "memberName": "linkToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53874,
                              "src": "10977:22:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 54066,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11011:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 54065,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11003:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 54064,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11003:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 54067,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11003:10:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "10977:36:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 54072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 54069,
                                "name": "staticConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54031,
                                "src": "11023:12:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                                }
                              },
                              "id": 54070,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11036:13:49",
                              "memberName": "chainSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53876,
                              "src": "11023:26:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 54071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11053:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11023:31:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10977:77:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 54077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 54074,
                              "name": "staticConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54031,
                              "src": "11064:12:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                              }
                            },
                            "id": 54075,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11077:17:49",
                            "memberName": "destChainSelector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53878,
                            "src": "11064:30:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 54076,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11098:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11064:35:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10977:122:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 54082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 54079,
                            "name": "staticConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54031,
                            "src": "11109:12:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                            }
                          },
                          "id": 54080,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11122:17:49",
                          "memberName": "defaultTxGasLimit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53880,
                          "src": "11109:30:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 54081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11143:1:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11109:35:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "10977:167:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 54090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 54084,
                          "name": "staticConfig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54031,
                          "src": "11154:12:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                            "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                          }
                        },
                        "id": 54085,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11167:8:49",
                        "memberName": "armProxy",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53886,
                        "src": "11154:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 54088,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11187:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 54087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11179:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 54086,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "11179:7:49",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 54089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11179:10:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "11154:35:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10977:212:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54095,
                  "nodeType": "IfStatement",
                  "src": "10966:252:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54092,
                        "name": "InvalidConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53793,
                        "src": "11203:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54093,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11203:15:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54094,
                    "nodeType": "RevertStatement",
                    "src": "11196:22:49"
                  }
                },
                {
                  "expression": {
                    "id": 54112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54096,
                      "name": "i_metadataHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53954,
                      "src": "11225:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 54100,
                                "name": "Internal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 49641,
                                "src": "11279:8:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Internal_$49641_$",
                                  "typeString": "type(library Internal)"
                                }
                              },
                              "id": 54101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "11288:22:49",
                              "memberName": "EVM_2_EVM_MESSAGE_HASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 49588,
                              "src": "11279:31:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "expression": {
                                "id": 54102,
                                "name": "staticConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54031,
                                "src": "11320:12:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                                }
                              },
                              "id": 54103,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11333:13:49",
                              "memberName": "chainSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53876,
                              "src": "11320:26:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "expression": {
                                "id": 54104,
                                "name": "staticConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54031,
                                "src": "11356:12:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                                }
                              },
                              "id": 54105,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11369:17:49",
                              "memberName": "destChainSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53878,
                              "src": "11356:30:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 54108,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "11404:4:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                    "typeString": "contract EVM2EVMOnRamp"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                    "typeString": "contract EVM2EVMOnRamp"
                                  }
                                ],
                                "id": 54107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11396:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 54106,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11396:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 54109,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11396:13:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 54098,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "11259:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 54099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "11263:6:49",
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "src": "11259:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 54110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11259:158:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 54097,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "11242:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 54111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11242:181:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11225:198:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 54113,
                  "nodeType": "ExpressionStatement",
                  "src": "11225:198:49"
                },
                {
                  "expression": {
                    "id": 54117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54114,
                      "name": "i_linkToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53963,
                      "src": "11429:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54115,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11443:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11456:9:49",
                      "memberName": "linkToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53874,
                      "src": "11443:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11429:36:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 54118,
                  "nodeType": "ExpressionStatement",
                  "src": "11429:36:49"
                },
                {
                  "expression": {
                    "id": 54122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54119,
                      "name": "i_chainSelector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53966,
                      "src": "11471:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54120,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11489:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54121,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11502:13:49",
                      "memberName": "chainSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53876,
                      "src": "11489:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11471:44:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 54123,
                  "nodeType": "ExpressionStatement",
                  "src": "11471:44:49"
                },
                {
                  "expression": {
                    "id": 54127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54124,
                      "name": "i_destChainSelector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53969,
                      "src": "11521:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54125,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11543:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54126,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11556:17:49",
                      "memberName": "destChainSelector",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53878,
                      "src": "11543:30:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11521:52:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 54128,
                  "nodeType": "ExpressionStatement",
                  "src": "11521:52:49"
                },
                {
                  "expression": {
                    "id": 54132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54129,
                      "name": "i_defaultTxGasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53957,
                      "src": "11579:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54130,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11601:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11614:17:49",
                      "memberName": "defaultTxGasLimit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53880,
                      "src": "11601:30:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11579:52:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 54133,
                  "nodeType": "ExpressionStatement",
                  "src": "11579:52:49"
                },
                {
                  "expression": {
                    "id": 54137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54134,
                      "name": "i_maxNopFeesJuels",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53960,
                      "src": "11637:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54135,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11657:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54136,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11670:15:49",
                      "memberName": "maxNopFeesJuels",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53882,
                      "src": "11657:28:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "11637:48:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 54138,
                  "nodeType": "ExpressionStatement",
                  "src": "11637:48:49"
                },
                {
                  "expression": {
                    "id": 54142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54139,
                      "name": "i_prevOnRamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53972,
                      "src": "11691:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54140,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11706:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54141,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11719:10:49",
                      "memberName": "prevOnRamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53884,
                      "src": "11706:23:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11691:38:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 54143,
                  "nodeType": "ExpressionStatement",
                  "src": "11691:38:49"
                },
                {
                  "expression": {
                    "id": 54147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54144,
                      "name": "i_armProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53975,
                      "src": "11735:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 54145,
                        "name": "staticConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54031,
                        "src": "11748:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      "id": 54146,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11761:8:49",
                      "memberName": "armProxy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53886,
                      "src": "11748:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11735:34:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 54148,
                  "nodeType": "ExpressionStatement",
                  "src": "11735:34:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54150,
                        "name": "dynamicConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54034,
                        "src": "11794:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      ],
                      "id": 54149,
                      "name": "_setDynamicConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54688,
                      "src": "11776:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DynamicConfig_$53902_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.DynamicConfig memory)"
                      }
                    },
                    "id": 54151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11776:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54152,
                  "nodeType": "ExpressionStatement",
                  "src": "11776:32:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54154,
                        "name": "feeTokenConfigs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54048,
                        "src": "11833:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      ],
                      "id": 54153,
                      "name": "_setFeeTokenConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55325,
                      "src": "11814:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory)"
                      }
                    },
                    "id": 54155,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11814:35:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54156,
                  "nodeType": "ExpressionStatement",
                  "src": "11814:35:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54158,
                        "name": "tokenTransferFeeConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54052,
                        "src": "11882:26:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      ],
                      "id": 54157,
                      "name": "_setTokenTransferFeeConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55399,
                      "src": "11855:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory)"
                      }
                    },
                    "id": 54159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11855:54:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54160,
                  "nodeType": "ExpressionStatement",
                  "src": "11855:54:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54162,
                        "name": "nopsAndWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54056,
                        "src": "11924:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                        }
                      ],
                      "id": 54161,
                      "name": "_setNops",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55617,
                      "src": "11915:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.NopAndWeight memory[] memory)"
                      }
                    },
                    "id": 54163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11915:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54164,
                  "nodeType": "ExpressionStatement",
                  "src": "11915:24:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 54170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12022:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 54169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "11996:25:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr_$",
                            "typeString": "function (uint256) pure returns (struct Internal.PoolUpdate memory[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 54167,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54166,
                                "name": "Internal.PoolUpdate",
                                "nameLocations": [
                                  "12000:8:49",
                                  "12009:10:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 49510,
                                "src": "12000:19:49"
                              },
                              "referencedDeclaration": 49510,
                              "src": "12000:19:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                                "typeString": "struct Internal.PoolUpdate"
                              }
                            },
                            "id": 54168,
                            "nodeType": "ArrayTypeName",
                            "src": "12000:21:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                              "typeString": "struct Internal.PoolUpdate[]"
                            }
                          }
                        },
                        "id": 54171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11996:28:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      },
                      {
                        "id": 54172,
                        "name": "tokensAndPools",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54038,
                        "src": "12026:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      ],
                      "id": 54165,
                      "name": "_applyPoolUpdates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54932,
                      "src": "11978:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct Internal.PoolUpdate memory[] memory,struct Internal.PoolUpdate memory[] memory)"
                      }
                    },
                    "id": 54173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11978:63:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54174,
                  "nodeType": "ExpressionStatement",
                  "src": "11978:63:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 54175,
                        "name": "allowlist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54041,
                        "src": "12052:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 54176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12062:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12052:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 54177,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12071:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12052:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54193,
                  "nodeType": "IfStatement",
                  "src": "12048:125:49",
                  "trueBody": {
                    "id": 54192,
                    "nodeType": "Block",
                    "src": "12074:99:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 54181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 54179,
                            "name": "s_allowlistEnabled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54028,
                            "src": "12082:18:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 54180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12103:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "12082:25:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54182,
                        "nodeType": "ExpressionStatement",
                        "src": "12082:25:49"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 54187,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12152:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 54186,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "12138:13:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (address[] memory)"
                                },
                                "typeName": {
                                  "baseType": {
                                    "id": 54184,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12142:7:49",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 54185,
                                  "nodeType": "ArrayTypeName",
                                  "src": "12142:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                    "typeString": "address[]"
                                  }
                                }
                              },
                              "id": 54188,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12138:16:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "id": 54189,
                              "name": "allowlist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54041,
                              "src": "12156:9:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            ],
                            "id": 54183,
                            "name": "_applyAllowListUpdates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55939,
                            "src": "12115:22:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address[] memory,address[] memory)"
                            }
                          },
                          "id": 54190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12115:51:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54191,
                        "nodeType": "ExpressionStatement",
                        "src": "12115:51:49"
                      }
                    ]
                  }
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 54059,
                    "name": "rateLimiterConfig",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54044,
                    "src": "10941:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Config_$49985_memory_ptr",
                      "typeString": "struct RateLimiter.Config memory"
                    }
                  }
                ],
                "id": 54060,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 54058,
                  "name": "AggregateRateLimiter",
                  "nameLocations": [
                    "10920:20:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 45485,
                  "src": "10920:20:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "10920:39:49"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 54057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54031,
                  "mutability": "mutable",
                  "name": "staticConfig",
                  "nameLocation": "10574:12:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10554:32:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                  },
                  "typeName": {
                    "id": 54030,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54029,
                      "name": "StaticConfig",
                      "nameLocations": [
                        "10554:12:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53887,
                      "src": "10554:12:49"
                    },
                    "referencedDeclaration": 53887,
                    "src": "10554:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_StaticConfig_$53887_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54034,
                  "mutability": "mutable",
                  "name": "dynamicConfig",
                  "nameLocation": "10613:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10592:34:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                  },
                  "typeName": {
                    "id": 54033,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54032,
                      "name": "DynamicConfig",
                      "nameLocations": [
                        "10592:13:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53902,
                      "src": "10592:13:49"
                    },
                    "referencedDeclaration": 53902,
                    "src": "10592:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54038,
                  "mutability": "mutable",
                  "name": "tokensAndPools",
                  "nameLocation": "10661:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10632:43:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Internal.PoolUpdate[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54036,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54035,
                        "name": "Internal.PoolUpdate",
                        "nameLocations": [
                          "10632:8:49",
                          "10641:10:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49510,
                        "src": "10632:19:49"
                      },
                      "referencedDeclaration": 49510,
                      "src": "10632:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                        "typeString": "struct Internal.PoolUpdate"
                      }
                    },
                    "id": 54037,
                    "nodeType": "ArrayTypeName",
                    "src": "10632:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                      "typeString": "struct Internal.PoolUpdate[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54041,
                  "mutability": "mutable",
                  "name": "allowlist",
                  "nameLocation": "10698:9:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10681:26:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54039,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10681:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 54040,
                    "nodeType": "ArrayTypeName",
                    "src": "10681:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54044,
                  "mutability": "mutable",
                  "name": "rateLimiterConfig",
                  "nameLocation": "10739:17:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10713:43:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Config_$49985_memory_ptr",
                    "typeString": "struct RateLimiter.Config"
                  },
                  "typeName": {
                    "id": 54043,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54042,
                      "name": "RateLimiter.Config",
                      "nameLocations": [
                        "10713:11:49",
                        "10725:6:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49985,
                      "src": "10713:18:49"
                    },
                    "referencedDeclaration": 49985,
                    "src": "10713:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Config_$49985_storage_ptr",
                      "typeString": "struct RateLimiter.Config"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54048,
                  "mutability": "mutable",
                  "name": "feeTokenConfigs",
                  "nameLocation": "10790:15:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10762:43:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54046,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54045,
                        "name": "FeeTokenConfigArgs",
                        "nameLocations": [
                          "10762:18:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53930,
                        "src": "10762:18:49"
                      },
                      "referencedDeclaration": 53930,
                      "src": "10762:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                      }
                    },
                    "id": 54047,
                    "nodeType": "ArrayTypeName",
                    "src": "10762:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54052,
                  "mutability": "mutable",
                  "name": "tokenTransferFeeConfigArgs",
                  "nameLocation": "10847:26:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10811:62:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54050,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54049,
                        "name": "TokenTransferFeeConfigArgs",
                        "nameLocations": [
                          "10811:26:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53942,
                        "src": "10811:26:49"
                      },
                      "referencedDeclaration": 53942,
                      "src": "10811:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                      }
                    },
                    "id": 54051,
                    "nodeType": "ArrayTypeName",
                    "src": "10811:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54056,
                  "mutability": "mutable",
                  "name": "nopsAndWeights",
                  "nameLocation": "10901:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54195,
                  "src": "10879:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54054,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54053,
                        "name": "NopAndWeight",
                        "nameLocations": [
                          "10879:12:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53947,
                        "src": "10879:12:49"
                      },
                      "referencedDeclaration": 53947,
                      "src": "10879:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                      }
                    },
                    "id": 54055,
                    "nodeType": "ArrayTypeName",
                    "src": "10879:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10548:371:49"
            },
            "returnParameters": {
              "id": 54061,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10960:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 54206,
            "nodeType": "FunctionDefinition",
            "src": "12425:110:49",
            "nodes": [],
            "body": {
              "id": 54205,
              "nodeType": "Block",
              "src": "12497:38:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 54203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54201,
                      "name": "s_sequenceNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54021,
                      "src": "12510:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 54202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12529:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "12510:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 54200,
                  "id": 54204,
                  "nodeType": "Return",
                  "src": "12503:27:49"
                }
              ]
            },
            "baseFunctions": [
              49181
            ],
            "documentation": {
              "id": 54196,
              "nodeType": "StructuredDocumentation",
              "src": "12392:30:49",
              "text": "@inheritdoc IEVM2AnyOnRamp"
            },
            "functionSelector": "4120fccd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExpectedNextSequenceNumber",
            "nameLocation": "12434:29:49",
            "parameters": {
              "id": 54197,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12463:2:49"
            },
            "returnParameters": {
              "id": 54200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54199,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54206,
                  "src": "12489:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 54198,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "12489:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12488:8:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54245,
            "nodeType": "FunctionDefinition",
            "src": "12572:375:49",
            "nodes": [],
            "body": {
              "id": 54244,
              "nodeType": "Block",
              "src": "12643:304:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54215
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54215,
                      "mutability": "mutable",
                      "name": "senderNonce",
                      "nameLocation": "12657:11:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54244,
                      "src": "12649:19:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 54214,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12649:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54219,
                  "initialValue": {
                    "baseExpression": {
                      "id": 54216,
                      "name": "s_senderNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54012,
                      "src": "12671:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
                        "typeString": "mapping(address => uint64)"
                      }
                    },
                    "id": 54218,
                    "indexExpression": {
                      "id": 54217,
                      "name": "sender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54209,
                      "src": "12685:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12671:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12649:43:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 54229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 54222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54220,
                        "name": "senderNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54215,
                        "src": "12703:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 54221,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12718:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12703:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 54228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54223,
                        "name": "i_prevOnRamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53972,
                        "src": "12723:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 54226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12747:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 54225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12739:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 54224,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12739:7:49",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 54227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12739:10:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "12723:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12703:46:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54238,
                  "nodeType": "IfStatement",
                  "src": "12699:212:49",
                  "trueBody": {
                    "id": 54237,
                    "nodeType": "Block",
                    "src": "12751:160:49",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54234,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54209,
                              "src": "12897:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 54231,
                                  "name": "i_prevOnRamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53972,
                                  "src": "12868:12:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 54230,
                                "name": "IEVM2AnyOnRamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 49215,
                                "src": "12853:14:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IEVM2AnyOnRamp_$49215_$",
                                  "typeString": "type(contract IEVM2AnyOnRamp)"
                                }
                              },
                              "id": 54232,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12853:28:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IEVM2AnyOnRamp_$49215",
                                "typeString": "contract IEVM2AnyOnRamp"
                              }
                            },
                            "id": 54233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12882:14:49",
                            "memberName": "getSenderNonce",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49189,
                            "src": "12853:43:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint64_$",
                              "typeString": "function (address) view external returns (uint64)"
                            }
                          },
                          "id": 54235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12853:51:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 54213,
                        "id": 54236,
                        "nodeType": "Return",
                        "src": "12846:58:49"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54241,
                        "name": "senderNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54215,
                        "src": "12930:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "12923:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint64_$",
                        "typeString": "type(uint64)"
                      },
                      "typeName": {
                        "id": 54239,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "12923:6:49",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 54242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12923:19:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 54213,
                  "id": 54243,
                  "nodeType": "Return",
                  "src": "12916:26:49"
                }
              ]
            },
            "baseFunctions": [
              49189
            ],
            "documentation": {
              "id": 54207,
              "nodeType": "StructuredDocumentation",
              "src": "12539:30:49",
              "text": "@inheritdoc IEVM2AnyOnRamp"
            },
            "functionSelector": "856c8247",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSenderNonce",
            "nameLocation": "12581:14:49",
            "parameters": {
              "id": 54210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54209,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "12604:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54245,
                  "src": "12596:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 54208,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12596:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12595:16:49"
            },
            "returnParameters": {
              "id": 54213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54212,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54245,
                  "src": "12635:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 54211,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "12635:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12634:8:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54518,
            "nodeType": "FunctionDefinition",
            "src": "12984:3768:49",
            "nodes": [],
            "body": {
              "id": 54517,
              "nodeType": "Block",
              "src": "13154:3598:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 54265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54260,
                      "name": "originalSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54253,
                      "src": "13270:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 54263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13296:1:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 54262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13288:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 54261,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13288:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 54264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13288:10:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13270:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54269,
                  "nodeType": "IfStatement",
                  "src": "13266:70:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54266,
                        "name": "RouterMustSetOriginalSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53777,
                        "src": "13307:27:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13307:29:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54268,
                    "nodeType": "RevertStatement",
                    "src": "13300:36:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 54276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54270,
                      "name": "s_allowlistEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54028,
                      "src": "13346:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 54275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "13368:37:49",
                      "subExpression": {
                        "arguments": [
                          {
                            "id": 54273,
                            "name": "originalSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54253,
                            "src": "13390:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 54271,
                            "name": "s_allowList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53995,
                            "src": "13369:11:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressSet_$105732_storage",
                              "typeString": "struct EnumerableSet.AddressSet storage ref"
                            }
                          },
                          "id": 54272,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13381:8:49",
                          "memberName": "contains",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 105813,
                          "src": "13369:20:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$105732_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$105732_storage_ptr_$",
                            "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                          }
                        },
                        "id": 54274,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13369:36:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13346:59:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54281,
                  "nodeType": "IfStatement",
                  "src": "13342:104:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 54278,
                          "name": "originalSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54253,
                          "src": "13431:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 54277,
                        "name": "SenderNotAllowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53791,
                        "src": "13414:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 54279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13414:32:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54280,
                    "nodeType": "RevertStatement",
                    "src": "13407:39:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 54286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 54282,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "13514:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 54283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13518:6:49",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "13514:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 54284,
                        "name": "s_dynamicConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53983,
                        "src": "13528:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                        }
                      },
                      "id": 54285,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13544:6:49",
                      "memberName": "router",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53889,
                      "src": "13528:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13514:36:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54290,
                  "nodeType": "IfStatement",
                  "src": "13510:71:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54287,
                        "name": "MustBeCalledByRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53775,
                        "src": "13559:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13559:22:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54289,
                    "nodeType": "RevertStatement",
                    "src": "13552:29:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 54291,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "13785:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54292,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13793:8:49",
                        "memberName": "receiver",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49447,
                        "src": "13785:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 54293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13802:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13785:23:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 54294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13812:2:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "13785:29:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54301,
                  "nodeType": "IfStatement",
                  "src": "13781:74:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 54297,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54249,
                            "src": "13838:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13846:8:49",
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49447,
                          "src": "13838:16:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 54296,
                        "name": "InvalidAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53797,
                        "src": "13823:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$",
                          "typeString": "function (bytes memory) pure"
                        }
                      },
                      "id": 54299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13823:32:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54300,
                    "nodeType": "RevertStatement",
                    "src": "13816:39:49"
                  }
                },
                {
                  "assignments": [
                    54303
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54303,
                      "mutability": "mutable",
                      "name": "decodedReceiver",
                      "nameLocation": "13869:15:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54517,
                      "src": "13861:23:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 54302,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13861:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54312,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54306,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "13898:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13906:8:49",
                        "memberName": "receiver",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49447,
                        "src": "13898:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 54309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13917:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 54308,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13917:7:49",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 54310,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "13916:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 54304,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "13887:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 54305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "13891:6:49",
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "13887:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 54311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13887:39:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13861:65:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 54323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 54319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54313,
                        "name": "decodedReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54303,
                        "src": "14051:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14074:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 54315,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "14074:7:49",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              }
                            ],
                            "id": 54314,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "14069:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 54317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14069:13:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint160",
                            "typeString": "type(uint160)"
                          }
                        },
                        "id": 54318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "14083:3:49",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "14069:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "src": "14051:35:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 54322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54320,
                        "name": "decodedReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54303,
                        "src": "14090:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "3130",
                        "id": 54321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14108:2:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10_by_1",
                          "typeString": "int_const 10"
                        },
                        "value": "10"
                      },
                      "src": "14090:20:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14051:59:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54329,
                  "nodeType": "IfStatement",
                  "src": "14047:104:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 54325,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54249,
                            "src": "14134:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14142:8:49",
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49447,
                          "src": "14134:16:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 54324,
                        "name": "InvalidAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53797,
                        "src": "14119:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$",
                          "typeString": "function (bytes memory) pure"
                        }
                      },
                      "id": 54327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14119:32:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54328,
                    "nodeType": "RevertStatement",
                    "src": "14112:39:49"
                  }
                },
                {
                  "assignments": [
                    54334
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54334,
                      "mutability": "mutable",
                      "name": "extraArgs",
                      "nameLocation": "14187:9:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54517,
                      "src": "14158:38:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                        "typeString": "struct Client.EVMExtraArgsV1"
                      },
                      "typeName": {
                        "id": 54333,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54332,
                          "name": "Client.EVMExtraArgsV1",
                          "nameLocations": [
                            "14158:6:49",
                            "14165:14:49"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 49464,
                          "src": "14158:21:49"
                        },
                        "referencedDeclaration": 49464,
                        "src": "14158:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_storage_ptr",
                          "typeString": "struct Client.EVMExtraArgsV1"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54339,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54336,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "14210:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14218:9:49",
                        "memberName": "extraArgs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49457,
                        "src": "14210:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 54335,
                      "name": "_fromBytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54560,
                      "src": "14199:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_calldata_ptr_$returns$_t_struct$_EVMExtraArgsV1_$49464_memory_ptr_$",
                        "typeString": "function (bytes calldata) view returns (struct Client.EVMExtraArgsV1 memory)"
                      }
                    },
                    "id": 54338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14199:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                      "typeString": "struct Client.EVMExtraArgsV1 memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14158:70:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 54341,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54249,
                            "src": "14299:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14307:4:49",
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49449,
                          "src": "14299:12:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 54343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14312:6:49",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "14299:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 54344,
                          "name": "extraArgs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54334,
                          "src": "14320:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                            "typeString": "struct Client.EVMExtraArgsV1 memory"
                          }
                        },
                        "id": 54345,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14330:8:49",
                        "memberName": "gasLimit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49463,
                        "src": "14320:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 54346,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54249,
                            "src": "14340:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14348:12:49",
                          "memberName": "tokenAmounts",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49453,
                          "src": "14340:20:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                          }
                        },
                        "id": 54348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14361:6:49",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "14340:27:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54340,
                      "name": "_validateMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54610,
                      "src": "14282:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) view"
                      }
                    },
                    "id": 54349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14282:86:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54350,
                  "nodeType": "ExpressionStatement",
                  "src": "14282:86:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54352,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "14435:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14443:12:49",
                        "memberName": "tokenAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49453,
                        "src": "14435:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 54355,
                              "name": "s_dynamicConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53983,
                              "src": "14472:15:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                              }
                            },
                            "id": 54356,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14488:13:49",
                            "memberName": "priceRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53897,
                            "src": "14472:29:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 54354,
                          "name": "IPriceRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49288,
                          "src": "14457:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPriceRegistry_$49288_$",
                            "typeString": "type(contract IPriceRegistry)"
                          }
                        },
                        "id": 54357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14457:45:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceRegistry_$49288",
                          "typeString": "contract IPriceRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPriceRegistry_$49288",
                          "typeString": "contract IPriceRegistry"
                        }
                      ],
                      "id": 54351,
                      "name": "_rateLimitValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45409,
                      "src": "14419:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_EVMTokenAmount_$49432_memory_ptr_$dyn_memory_ptr_$_t_contract$_IPriceRegistry_$49288_$returns$__$",
                        "typeString": "function (struct Client.EVMTokenAmount memory[] memory,contract IPriceRegistry)"
                      }
                    },
                    "id": 54358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14419:84:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54359,
                  "nodeType": "ExpressionStatement",
                  "src": "14419:84:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 54363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 54360,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54249,
                        "src": "14569:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                          "typeString": "struct Client.EVM2AnyMessage calldata"
                        }
                      },
                      "id": 54361,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14577:8:49",
                      "memberName": "feeToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49455,
                      "src": "14569:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 54362,
                      "name": "i_linkToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53963,
                      "src": "14589:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14569:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 54388,
                    "nodeType": "Block",
                    "src": "14713:281:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 54386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 54372,
                            "name": "s_nopFeesJuels",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54015,
                            "src": "14834:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 54380,
                                      "name": "message",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54249,
                                      "src": "14933:7:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                        "typeString": "struct Client.EVM2AnyMessage calldata"
                                      }
                                    },
                                    "id": 54381,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14941:8:49",
                                    "memberName": "feeToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 49455,
                                    "src": "14933:16:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 54382,
                                    "name": "feeTokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54251,
                                    "src": "14951:14:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 54383,
                                    "name": "i_linkToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 53963,
                                    "src": "14967:11:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 54376,
                                          "name": "s_dynamicConfig",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 53983,
                                          "src": "14883:15:49",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                            "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                                          }
                                        },
                                        "id": 54377,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "14899:13:49",
                                        "memberName": "priceRegistry",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 53897,
                                        "src": "14883:29:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 54375,
                                      "name": "IPriceRegistry",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 49288,
                                      "src": "14868:14:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IPriceRegistry_$49288_$",
                                        "typeString": "type(contract IPriceRegistry)"
                                      }
                                    },
                                    "id": 54378,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14868:45:49",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IPriceRegistry_$49288",
                                      "typeString": "contract IPriceRegistry"
                                    }
                                  },
                                  "id": 54379,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "14914:18:49",
                                  "memberName": "convertTokenAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 49287,
                                  "src": "14868:64:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address,uint256,address) view external returns (uint256)"
                                  }
                                },
                                "id": 54384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14868:111:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 54374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14852:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint96_$",
                                "typeString": "type(uint96)"
                              },
                              "typeName": {
                                "id": 54373,
                                "name": "uint96",
                                "nodeType": "ElementaryTypeName",
                                "src": "14852:6:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 54385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14852:135:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "14834:153:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "id": 54387,
                        "nodeType": "ExpressionStatement",
                        "src": "14834:153:49"
                      }
                    ]
                  },
                  "id": 54389,
                  "nodeType": "IfStatement",
                  "src": "14565:429:49",
                  "trueBody": {
                    "id": 54371,
                    "nodeType": "Block",
                    "src": "14602:105:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 54369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 54364,
                            "name": "s_nopFeesJuels",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54015,
                            "src": "14660:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 54367,
                                "name": "feeTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54251,
                                "src": "14685:14:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 54366,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14678:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint96_$",
                                "typeString": "type(uint96)"
                              },
                              "typeName": {
                                "id": 54365,
                                "name": "uint96",
                                "nodeType": "ElementaryTypeName",
                                "src": "14678:6:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 54368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14678:22:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "14660:40:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "id": 54370,
                        "nodeType": "ExpressionStatement",
                        "src": "14660:40:49"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 54392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54390,
                      "name": "s_nopFeesJuels",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54015,
                      "src": "15003:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 54391,
                      "name": "i_maxNopFeesJuels",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53960,
                      "src": "15020:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "15003:34:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54396,
                  "nodeType": "IfStatement",
                  "src": "14999:69:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54393,
                        "name": "MaxFeeBalanceReached",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53758,
                        "src": "15046:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15046:22:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54395,
                    "nodeType": "RevertStatement",
                    "src": "15039:29:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 54408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 54401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 54397,
                          "name": "s_senderNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54012,
                          "src": "15079:13:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
                            "typeString": "mapping(address => uint64)"
                          }
                        },
                        "id": 54399,
                        "indexExpression": {
                          "id": 54398,
                          "name": "originalSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54253,
                          "src": "15093:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15079:29:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 54400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15112:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "15079:34:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 54407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54402,
                        "name": "i_prevOnRamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53972,
                        "src": "15117:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 54405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15141:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 54404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15133:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 54403,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15133:7:49",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 54406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15133:10:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "15117:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "15079:64:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54421,
                  "nodeType": "IfStatement",
                  "src": "15075:339:49",
                  "trueBody": {
                    "id": 54420,
                    "nodeType": "Block",
                    "src": "15145:269:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 54418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 54409,
                              "name": "s_senderNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54012,
                              "src": "15316:13:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
                                "typeString": "mapping(address => uint64)"
                              }
                            },
                            "id": 54411,
                            "indexExpression": {
                              "id": 54410,
                              "name": "originalSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54253,
                              "src": "15330:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15316:29:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 54416,
                                "name": "originalSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54253,
                                "src": "15392:14:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 54413,
                                    "name": "i_prevOnRamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 53972,
                                    "src": "15363:12:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 54412,
                                  "name": "IEVM2AnyOnRamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 49215,
                                  "src": "15348:14:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IEVM2AnyOnRamp_$49215_$",
                                    "typeString": "type(contract IEVM2AnyOnRamp)"
                                  }
                                },
                                "id": 54414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15348:28:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IEVM2AnyOnRamp_$49215",
                                  "typeString": "contract IEVM2AnyOnRamp"
                                }
                              },
                              "id": 54415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15377:14:49",
                              "memberName": "getSenderNonce",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 49189,
                              "src": "15348:43:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint64_$",
                                "typeString": "function (address) view external returns (uint64)"
                              }
                            },
                            "id": 54417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15348:59:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "15316:91:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 54419,
                        "nodeType": "ExpressionStatement",
                        "src": "15316:91:49"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    54426
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54426,
                      "mutability": "mutable",
                      "name": "newMessage",
                      "nameLocation": "15541:10:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54517,
                      "src": "15510:41:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                        "typeString": "struct Internal.EVM2EVMMessage"
                      },
                      "typeName": {
                        "id": 54425,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54424,
                          "name": "Internal.EVM2EVMMessage",
                          "nameLocations": [
                            "15510:8:49",
                            "15519:14:49"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 49551,
                          "src": "15510:23:49"
                        },
                        "referencedDeclaration": 49551,
                        "src": "15510:23:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_storage_ptr",
                          "typeString": "struct Internal.EVM2EVMMessage"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54456,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 54429,
                        "name": "i_chainSelector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53966,
                        "src": "15607:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 54431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": true,
                        "src": "15646:18:49",
                        "subExpression": {
                          "id": 54430,
                          "name": "s_sequenceNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54021,
                          "src": "15648:16:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 54432,
                        "name": "feeTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54251,
                        "src": "15688:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 54433,
                        "name": "originalSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54253,
                        "src": "15718:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 54437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": true,
                        "src": "15747:31:49",
                        "subExpression": {
                          "baseExpression": {
                            "id": 54434,
                            "name": "s_senderNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54012,
                            "src": "15749:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint64_$",
                              "typeString": "mapping(address => uint64)"
                            }
                          },
                          "id": 54436,
                          "indexExpression": {
                            "id": 54435,
                            "name": "originalSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54253,
                            "src": "15763:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "15749:29:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "expression": {
                          "id": 54438,
                          "name": "extraArgs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54334,
                          "src": "15796:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                            "typeString": "struct Client.EVMExtraArgsV1 memory"
                          }
                        },
                        "id": 54439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15806:8:49",
                        "memberName": "gasLimit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49463,
                        "src": "15796:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 54440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15830:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 54445,
                                "name": "decodedReceiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54303,
                                "src": "15869:15:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 54444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15861:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 54443,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "15861:7:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 54446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15861:24:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 54442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15853:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 54441,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15853:7:49",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 54447,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15853:33:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 54448,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "15900:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54449,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15908:4:49",
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49449,
                        "src": "15900:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 54450,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "15934:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15942:12:49",
                        "memberName": "tokenAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49453,
                        "src": "15934:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 54452,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "15972:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15980:8:49",
                        "memberName": "feeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49455,
                        "src": "15972:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 54454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16007:2:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "id": 54427,
                        "name": "Internal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49641,
                        "src": "15554:8:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Internal_$49641_$",
                          "typeString": "type(library Internal)"
                        }
                      },
                      "id": 54428,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15563:14:49",
                      "memberName": "EVM2EVMMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49551,
                      "src": "15554:23:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_EVM2EVMMessage_$49551_storage_ptr_$",
                        "typeString": "type(struct Internal.EVM2EVMMessage storage pointer)"
                      }
                    },
                    "id": 54455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "15586:19:49",
                      "15630:14:49",
                      "15672:14:49",
                      "15710:6:49",
                      "15740:5:49",
                      "15786:8:49",
                      "15822:6:49",
                      "15843:8:49",
                      "15894:4:49",
                      "15920:12:49",
                      "15962:8:49",
                      "15996:9:49"
                    ],
                    "names": [
                      "sourceChainSelector",
                      "sequenceNumber",
                      "feeTokenAmount",
                      "sender",
                      "nonce",
                      "gasLimit",
                      "strict",
                      "receiver",
                      "data",
                      "tokenAmounts",
                      "feeToken",
                      "messageId"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "15554:462:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                      "typeString": "struct Internal.EVM2EVMMessage memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15510:506:49"
                },
                {
                  "expression": {
                    "id": 54465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 54457,
                        "name": "newMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54426,
                        "src": "16022:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                          "typeString": "struct Internal.EVM2EVMMessage memory"
                        }
                      },
                      "id": 54459,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "16033:9:49",
                      "memberName": "messageId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49550,
                      "src": "16022:20:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 54462,
                          "name": "newMessage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54426,
                          "src": "16060:10:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                            "typeString": "struct Internal.EVM2EVMMessage memory"
                          }
                        },
                        {
                          "id": 54463,
                          "name": "i_metadataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53954,
                          "src": "16072:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                            "typeString": "struct Internal.EVM2EVMMessage memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 54460,
                          "name": "Internal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49641,
                          "src": "16045:8:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Internal_$49641_$",
                            "typeString": "type(library Internal)"
                          }
                        },
                        "id": 54461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16054:5:49",
                        "memberName": "_hash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49635,
                        "src": "16045:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_EVM2EVMMessage_$49551_memory_ptr_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (struct Internal.EVM2EVMMessage memory,bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 54464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16045:42:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "16022:65:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 54466,
                  "nodeType": "ExpressionStatement",
                  "src": "16022:65:49"
                },
                {
                  "body": {
                    "id": 54508,
                    "nodeType": "Block",
                    "src": "16302:344:49",
                    "statements": [
                      {
                        "assignments": [
                          54483
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54483,
                            "mutability": "mutable",
                            "name": "tokenAndAmount",
                            "nameLocation": "16339:14:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 54508,
                            "src": "16310:43:49",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                              "typeString": "struct Client.EVMTokenAmount"
                            },
                            "typeName": {
                              "id": 54482,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54481,
                                "name": "Client.EVMTokenAmount",
                                "nameLocations": [
                                  "16310:6:49",
                                  "16317:14:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 49432,
                                "src": "16310:21:49"
                              },
                              "referencedDeclaration": 49432,
                              "src": "16310:21:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_storage_ptr",
                                "typeString": "struct Client.EVMTokenAmount"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54488,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 54484,
                              "name": "message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54249,
                              "src": "16356:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                "typeString": "struct Client.EVM2AnyMessage calldata"
                              }
                            },
                            "id": 54485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16364:12:49",
                            "memberName": "tokenAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49453,
                            "src": "16356:20:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                            }
                          },
                          "id": 54487,
                          "indexExpression": {
                            "id": 54486,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54468,
                            "src": "16377:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16356:23:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_calldata_ptr",
                            "typeString": "struct Client.EVMTokenAmount calldata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16310:69:49"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54496,
                              "name": "originalSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54253,
                              "src": "16458:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 54497,
                                "name": "message",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54249,
                                "src": "16482:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                  "typeString": "struct Client.EVM2AnyMessage calldata"
                                }
                              },
                              "id": 54498,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16490:8:49",
                              "memberName": "receiver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 49447,
                              "src": "16482:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "expression": {
                                "id": 54499,
                                "name": "tokenAndAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54483,
                                "src": "16508:14:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                  "typeString": "struct Client.EVMTokenAmount memory"
                                }
                              },
                              "id": 54500,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16523:6:49",
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 49431,
                              "src": "16508:21:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54501,
                              "name": "i_destChainSelector",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53969,
                              "src": "16539:19:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "",
                                  "id": 54504,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16574:2:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                    "typeString": "literal_string \"\""
                                  },
                                  "value": ""
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                    "typeString": "literal_string \"\""
                                  }
                                ],
                                "id": 54503,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "16568:5:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 54502,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "16568:5:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 54505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16568:9:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 54491,
                                        "name": "tokenAndAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 54483,
                                        "src": "16415:14:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                          "typeString": "struct Client.EVMTokenAmount memory"
                                        }
                                      },
                                      "id": 54492,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "16430:5:49",
                                      "memberName": "token",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 49429,
                                      "src": "16415:20:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 54490,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 103340,
                                    "src": "16408:6:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 54493,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16408:28:49",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$103340",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$103340",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 54489,
                                "name": "getPoolBySourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54768,
                                "src": "16387:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$103340_$returns$_t_contract$_IPool_$49425_$",
                                  "typeString": "function (contract IERC20) view returns (contract IPool)"
                                }
                              },
                              "id": 54494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16387:50:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPool_$49425",
                                "typeString": "contract IPool"
                              }
                            },
                            "id": 54495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16438:10:49",
                            "memberName": "lockOrBurn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49403,
                            "src": "16387:61:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint64_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,uint64,bytes memory) external returns (bytes memory)"
                            }
                          },
                          "id": 54506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16387:252:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 54507,
                        "nodeType": "ExpressionStatement",
                        "src": "16387:252:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54471,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54468,
                      "src": "16264:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 54472,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54249,
                          "src": "16268:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16276:12:49",
                        "memberName": "tokenAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49453,
                        "src": "16268:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        }
                      },
                      "id": 54474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16289:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16268:27:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16264:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54509,
                  "initializationExpression": {
                    "assignments": [
                      54468
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54468,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "16257:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 54509,
                        "src": "16249:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54467,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16249:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54470,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16261:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16249:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "16297:3:49",
                      "subExpression": {
                        "id": 54476,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54468,
                        "src": "16299:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54478,
                    "nodeType": "ExpressionStatement",
                    "src": "16297:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "16244:402:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 54511,
                        "name": "newMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54426,
                        "src": "16703:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                          "typeString": "struct Internal.EVM2EVMMessage memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                          "typeString": "struct Internal.EVM2EVMMessage memory"
                        }
                      ],
                      "id": 54510,
                      "name": "CCIPSendRequested",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53852,
                      "src": "16685:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_EVM2EVMMessage_$49551_memory_ptr_$returns$__$",
                        "typeString": "function (struct Internal.EVM2EVMMessage memory)"
                      }
                    },
                    "id": 54512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16685:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54513,
                  "nodeType": "EmitStatement",
                  "src": "16680:34:49"
                },
                {
                  "expression": {
                    "expression": {
                      "id": 54514,
                      "name": "newMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54426,
                      "src": "16727:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_EVM2EVMMessage_$49551_memory_ptr",
                        "typeString": "struct Internal.EVM2EVMMessage memory"
                      }
                    },
                    "id": 54515,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "16738:9:49",
                    "memberName": "messageId",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 49550,
                    "src": "16727:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 54259,
                  "id": 54516,
                  "nodeType": "Return",
                  "src": "16720:27:49"
                }
              ]
            },
            "baseFunctions": [
              49214
            ],
            "documentation": {
              "id": 54246,
              "nodeType": "StructuredDocumentation",
              "src": "12951:30:49",
              "text": "@inheritdoc IEVM2AnyOnRamp"
            },
            "functionSelector": "a7d3e02f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54256,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54255,
                  "name": "whenHealthy",
                  "nameLocations": [
                    "13124:11:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55998,
                  "src": "13124:11:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "13124:11:49"
              }
            ],
            "name": "forwardFromRouter",
            "nameLocation": "12993:17:49",
            "parameters": {
              "id": 54254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54249,
                  "mutability": "mutable",
                  "name": "message",
                  "nameLocation": "13047:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54518,
                  "src": "13016:38:49",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                    "typeString": "struct Client.EVM2AnyMessage"
                  },
                  "typeName": {
                    "id": 54248,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54247,
                      "name": "Client.EVM2AnyMessage",
                      "nameLocations": [
                        "13016:6:49",
                        "13023:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49458,
                      "src": "13016:21:49"
                    },
                    "referencedDeclaration": 49458,
                    "src": "13016:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_storage_ptr",
                      "typeString": "struct Client.EVM2AnyMessage"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54251,
                  "mutability": "mutable",
                  "name": "feeTokenAmount",
                  "nameLocation": "13068:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54518,
                  "src": "13060:22:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54250,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13060:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54253,
                  "mutability": "mutable",
                  "name": "originalSender",
                  "nameLocation": "13096:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54518,
                  "src": "13088:22:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 54252,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13088:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13010:104:49"
            },
            "returnParameters": {
              "id": 54259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54258,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54518,
                  "src": "13145:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 54257,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13145:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13144:9:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54560,
            "nodeType": "FunctionDefinition",
            "src": "16890:540:49",
            "nodes": [],
            "body": {
              "id": 54559,
              "nodeType": "Block",
              "src": "16989:441:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 54527,
                        "name": "extraArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54521,
                        "src": "16999:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 54528,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17009:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16999:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 54529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17019:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16999:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54537,
                  "nodeType": "IfStatement",
                  "src": "16995:103:49",
                  "trueBody": {
                    "id": 54536,
                    "nodeType": "Block",
                    "src": "17022:76:49",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54533,
                              "name": "i_defaultTxGasLimit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53957,
                              "src": "17070:19:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "expression": {
                              "id": 54531,
                              "name": "Client",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49480,
                              "src": "17037:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Client_$49480_$",
                                "typeString": "type(library Client)"
                              }
                            },
                            "id": 54532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17044:14:49",
                            "memberName": "EVMExtraArgsV1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49464,
                            "src": "17037:21:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_EVMExtraArgsV1_$49464_storage_ptr_$",
                              "typeString": "type(struct Client.EVMExtraArgsV1 storage pointer)"
                            }
                          },
                          "id": 54534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "17060:8:49"
                          ],
                          "names": [
                            "gasLimit"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "17037:54:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                            "typeString": "struct Client.EVMExtraArgsV1 memory"
                          }
                        },
                        "functionReturnParameters": 54526,
                        "id": 54535,
                        "nodeType": "Return",
                        "src": "17030:61:49"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 54544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 54540,
                          "name": "extraArgs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54521,
                          "src": "17114:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 54539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17107:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        },
                        "typeName": {
                          "id": 54538,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "17107:6:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 54541,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17107:17:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 54542,
                        "name": "Client",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49480,
                        "src": "17128:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Client_$49480_$",
                          "typeString": "type(library Client)"
                        }
                      },
                      "id": 54543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "17135:21:49",
                      "memberName": "EVM_EXTRA_ARGS_V1_TAG",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49461,
                      "src": "17128:28:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "17107:49:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54548,
                  "nodeType": "IfStatement",
                  "src": "17103:83:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54545,
                        "name": "InvalidExtraArgsTag",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53742,
                        "src": "17165:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54546,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17165:21:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54547,
                    "nodeType": "RevertStatement",
                    "src": "17158:28:49"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 54551,
                          "name": "extraArgs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54521,
                          "src": "17386:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 54553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexRangeAccess",
                        "src": "17386:13:49",
                        "startExpression": {
                          "hexValue": "34",
                          "id": 54552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17396:1:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        }
                      },
                      {
                        "components": [
                          {
                            "expression": {
                              "id": 54554,
                              "name": "Client",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49480,
                              "src": "17402:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Client_$49480_$",
                                "typeString": "type(library Client)"
                              }
                            },
                            "id": 54555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17409:14:49",
                            "memberName": "EVMExtraArgsV1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49464,
                            "src": "17402:21:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_EVMExtraArgsV1_$49464_storage_ptr_$",
                              "typeString": "type(struct Client.EVMExtraArgsV1 storage pointer)"
                            }
                          }
                        ],
                        "id": 54556,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "17401:23:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_EVMExtraArgsV1_$49464_storage_ptr_$",
                          "typeString": "type(struct Client.EVMExtraArgsV1 storage pointer)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                          "typeString": "bytes calldata slice"
                        },
                        {
                          "typeIdentifier": "t_type$_t_struct$_EVMExtraArgsV1_$49464_storage_ptr_$",
                          "typeString": "type(struct Client.EVMExtraArgsV1 storage pointer)"
                        }
                      ],
                      "expression": {
                        "id": 54549,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "17375:3:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 54550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "17379:6:49",
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "17375:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 54557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17375:50:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                      "typeString": "struct Client.EVMExtraArgsV1 memory"
                    }
                  },
                  "functionReturnParameters": 54526,
                  "id": 54558,
                  "nodeType": "Return",
                  "src": "17368:57:49"
                }
              ]
            },
            "documentation": {
              "id": 54519,
              "nodeType": "StructuredDocumentation",
              "src": "16756:131:49",
              "text": "@dev Convert the extra args bytes into a struct\n @param extraArgs The extra args bytes\n @return The extra args struct"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_fromBytes",
            "nameLocation": "16899:10:49",
            "parameters": {
              "id": 54522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54521,
                  "mutability": "mutable",
                  "name": "extraArgs",
                  "nameLocation": "16925:9:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54560,
                  "src": "16910:24:49",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 54520,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16910:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16909:26:49"
            },
            "returnParameters": {
              "id": 54526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54525,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54560,
                  "src": "16959:28:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                    "typeString": "struct Client.EVMExtraArgsV1"
                  },
                  "typeName": {
                    "id": 54524,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54523,
                      "name": "Client.EVMExtraArgsV1",
                      "nameLocations": [
                        "16959:6:49",
                        "16966:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49464,
                      "src": "16959:21:49"
                    },
                    "referencedDeclaration": 49464,
                    "src": "16959:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_storage_ptr",
                      "typeString": "struct Client.EVMExtraArgsV1"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16958:30:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 54610,
            "nodeType": "FunctionDefinition",
            "src": "17877:493:49",
            "nodes": [],
            "body": {
              "id": 54609,
              "nodeType": "Block",
              "src": "17979:391:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54571,
                      "mutability": "mutable",
                      "name": "maxDataSize",
                      "nameLocation": "18039:11:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54609,
                      "src": "18031:19:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 54570,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18031:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54577,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54574,
                          "name": "s_dynamicConfig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53983,
                          "src": "18061:15:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                            "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                          }
                        },
                        "id": 54575,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18077:11:49",
                        "memberName": "maxDataSize",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53899,
                        "src": "18061:27:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 54573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18053:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 54572,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18053:7:49",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 54576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18053:36:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18031:58:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54578,
                      "name": "dataLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54563,
                      "src": "18099:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 54579,
                      "name": "maxDataSize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54571,
                      "src": "18112:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18099:24:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54586,
                  "nodeType": "IfStatement",
                  "src": "18095:77:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 54582,
                          "name": "maxDataSize",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54571,
                          "src": "18148:11:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 54583,
                          "name": "dataLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54563,
                          "src": "18161:10:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 54581,
                        "name": "MessageTooLarge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53764,
                        "src": "18132:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                          "typeString": "function (uint256,uint256) pure"
                        }
                      },
                      "id": 54584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18132:40:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54585,
                    "nodeType": "RevertStatement",
                    "src": "18125:47:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54587,
                      "name": "gasLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54565,
                      "src": "18182:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 54590,
                            "name": "s_dynamicConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53983,
                            "src": "18201:15:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                              "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                            }
                          },
                          "id": 54591,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18217:11:49",
                          "memberName": "maxGasLimit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53901,
                          "src": "18201:27:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        ],
                        "id": 54589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18193:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 54588,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18193:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 54592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18193:36:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18182:47:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54597,
                  "nodeType": "IfStatement",
                  "src": "18178:84:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54594,
                        "name": "MessageGasLimitTooHigh",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53766,
                        "src": "18238:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18238:24:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54596,
                    "nodeType": "RevertStatement",
                    "src": "18231:31:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54598,
                      "name": "numberOfTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54567,
                      "src": "18272:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 54601,
                            "name": "s_dynamicConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53983,
                            "src": "18297:15:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                              "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                            }
                          },
                          "id": 54602,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18313:15:49",
                          "memberName": "maxTokensLength",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53891,
                          "src": "18297:31:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        ],
                        "id": 54600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18289:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 54599,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18289:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 54603,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18289:40:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18272:57:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54608,
                  "nodeType": "IfStatement",
                  "src": "18268:97:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54605,
                        "name": "UnsupportedNumberOfTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53768,
                        "src": "18338:25:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18338:27:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54607,
                    "nodeType": "RevertStatement",
                    "src": "18331:34:49"
                  }
                }
              ]
            },
            "documentation": {
              "id": 54561,
              "nodeType": "StructuredDocumentation",
              "src": "17434:440:49",
              "text": "@notice Validate the forwarded message with various checks.\n @dev This function can be called multiple times during a CCIPSend,\n only common user-driven mistakes are validated here to minimize duplicate validation cost.\n @param dataLength The length of the data field of the message.\n @param gasLimit The gasLimit set in message for destination execution.\n @param numberOfTokens The number of tokens to be sent."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validateMessage",
            "nameLocation": "17886:16:49",
            "parameters": {
              "id": 54568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54563,
                  "mutability": "mutable",
                  "name": "dataLength",
                  "nameLocation": "17911:10:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54610,
                  "src": "17903:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54562,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17903:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54565,
                  "mutability": "mutable",
                  "name": "gasLimit",
                  "nameLocation": "17931:8:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54610,
                  "src": "17923:16:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17923:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54567,
                  "mutability": "mutable",
                  "name": "numberOfTokens",
                  "nameLocation": "17949:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54610,
                  "src": "17941:22:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54566,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17941:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17902:62:49"
            },
            "returnParameters": {
              "id": 54569,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17979:0:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 54628,
            "nodeType": "FunctionDefinition",
            "src": "18666:393:49",
            "nodes": [],
            "body": {
              "id": 54627,
              "nodeType": "Block",
              "src": "18737:322:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54618,
                        "name": "i_linkToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53963,
                        "src": "18790:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 54619,
                        "name": "i_chainSelector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53966,
                        "src": "18826:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 54620,
                        "name": "i_destChainSelector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53969,
                        "src": "18870:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 54621,
                        "name": "i_defaultTxGasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53957,
                        "src": "18918:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 54622,
                        "name": "i_maxNopFeesJuels",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53960,
                        "src": "18964:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      {
                        "id": 54623,
                        "name": "i_prevOnRamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53972,
                        "src": "19003:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 54624,
                        "name": "i_armProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53975,
                        "src": "19035:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 54617,
                      "name": "StaticConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53887,
                      "src": "18756:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_StaticConfig_$53887_storage_ptr_$",
                        "typeString": "type(struct EVM2EVMOnRamp.StaticConfig storage pointer)"
                      }
                    },
                    "id": 54625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "18779:9:49",
                      "18811:13:49",
                      "18851:17:49",
                      "18899:17:49",
                      "18947:15:49",
                      "18991:10:49",
                      "19025:8:49"
                    ],
                    "names": [
                      "linkToken",
                      "chainSelector",
                      "destChainSelector",
                      "defaultTxGasLimit",
                      "maxNopFeesJuels",
                      "prevOnRamp",
                      "armProxy"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "18756:298:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                      "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                    }
                  },
                  "functionReturnParameters": 54616,
                  "id": 54626,
                  "nodeType": "Return",
                  "src": "18743:311:49"
                }
              ]
            },
            "documentation": {
              "id": 54611,
              "nodeType": "StructuredDocumentation",
              "src": "18585:78:49",
              "text": "@notice Returns the static onRamp config.\n @return the configuration."
            },
            "functionSelector": "06285c69",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStaticConfig",
            "nameLocation": "18675:15:49",
            "parameters": {
              "id": 54612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18690:2:49"
            },
            "returnParameters": {
              "id": 54616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54615,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54628,
                  "src": "18716:19:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                  },
                  "typeName": {
                    "id": 54614,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54613,
                      "name": "StaticConfig",
                      "nameLocations": [
                        "18716:12:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53887,
                      "src": "18716:12:49"
                    },
                    "referencedDeclaration": 53887,
                    "src": "18716:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_StaticConfig_$53887_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.StaticConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18715:21:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54638,
            "nodeType": "FunctionDefinition",
            "src": "19159:120:49",
            "nodes": [],
            "body": {
              "id": 54637,
              "nodeType": "Block",
              "src": "19246:33:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 54635,
                    "name": "s_dynamicConfig",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 53983,
                    "src": "19259:15:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                    }
                  },
                  "functionReturnParameters": 54634,
                  "id": 54636,
                  "nodeType": "Return",
                  "src": "19252:22:49"
                }
              ]
            },
            "documentation": {
              "id": 54629,
              "nodeType": "StructuredDocumentation",
              "src": "19063:93:49",
              "text": "@notice Returns the dynamic onRamp config.\n @return dynamicConfig the configuration."
            },
            "functionSelector": "7437ff9f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDynamicConfig",
            "nameLocation": "19168:16:49",
            "parameters": {
              "id": 54630,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19184:2:49"
            },
            "returnParameters": {
              "id": 54634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54633,
                  "mutability": "mutable",
                  "name": "dynamicConfig",
                  "nameLocation": "19231:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54638,
                  "src": "19210:34:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                  },
                  "typeName": {
                    "id": 54632,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54631,
                      "name": "DynamicConfig",
                      "nameLocations": [
                        "19210:13:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53902,
                      "src": "19210:13:49"
                    },
                    "referencedDeclaration": 53902,
                    "src": "19210:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19209:36:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54652,
            "nodeType": "FunctionDefinition",
            "src": "19375:124:49",
            "nodes": [],
            "body": {
              "id": 54651,
              "nodeType": "Block",
              "src": "19456:43:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54648,
                        "name": "dynamicConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54642,
                        "src": "19480:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      ],
                      "id": 54647,
                      "name": "_setDynamicConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54688,
                      "src": "19462:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DynamicConfig_$53902_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.DynamicConfig memory)"
                      }
                    },
                    "id": 54649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19462:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54650,
                  "nodeType": "ExpressionStatement",
                  "src": "19462:32:49"
                }
              ]
            },
            "documentation": {
              "id": 54639,
              "nodeType": "StructuredDocumentation",
              "src": "19283:89:49",
              "text": "@notice Sets the dynamic configuration.\n @param dynamicConfig The configuration."
            },
            "functionSelector": "7132721a",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54645,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54644,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "19446:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 101659,
                  "src": "19446:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "19446:9:49"
              }
            ],
            "name": "setDynamicConfig",
            "nameLocation": "19384:16:49",
            "parameters": {
              "id": 54643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54642,
                  "mutability": "mutable",
                  "name": "dynamicConfig",
                  "nameLocation": "19422:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54652,
                  "src": "19401:34:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                  },
                  "typeName": {
                    "id": 54641,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54640,
                      "name": "DynamicConfig",
                      "nameLocations": [
                        "19401:13:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53902,
                      "src": "19401:13:49"
                    },
                    "referencedDeclaration": 53902,
                    "src": "19401:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19400:36:49"
            },
            "returnParameters": {
              "id": 54646,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19456:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54688,
            "nodeType": "FunctionDefinition",
            "src": "19593:618:49",
            "nodes": [],
            "body": {
              "id": 54687,
              "nodeType": "Block",
              "src": "19665:546:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 54665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 54659,
                        "name": "dynamicConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54656,
                        "src": "19749:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      },
                      "id": 54660,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19763:13:49",
                      "memberName": "priceRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53897,
                      "src": "19749:27:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 54663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19788:1:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 54662,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19780:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 54661,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19780:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 54664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19780:10:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19749:41:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54669,
                  "nodeType": "IfStatement",
                  "src": "19745:69:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 54666,
                        "name": "InvalidConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53793,
                        "src": "19799:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 54667,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19799:15:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54668,
                    "nodeType": "RevertStatement",
                    "src": "19792:22:49"
                  }
                },
                {
                  "expression": {
                    "id": 54672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 54670,
                      "name": "s_dynamicConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53983,
                      "src": "19821:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                        "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 54671,
                      "name": "dynamicConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54656,
                      "src": "19839:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                        "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                      }
                    },
                    "src": "19821:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                    }
                  },
                  "id": 54673,
                  "nodeType": "ExpressionStatement",
                  "src": "19821:31:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 54676,
                            "name": "i_linkToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53963,
                            "src": "19915:11:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 54677,
                            "name": "i_chainSelector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53966,
                            "src": "19951:15:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "id": 54678,
                            "name": "i_destChainSelector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53969,
                            "src": "19995:19:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "id": 54679,
                            "name": "i_defaultTxGasLimit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53957,
                            "src": "20043:19:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "id": 54680,
                            "name": "i_maxNopFeesJuels",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53960,
                            "src": "20089:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          {
                            "id": 54681,
                            "name": "i_prevOnRamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53972,
                            "src": "20128:12:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 54682,
                            "name": "i_armProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53975,
                            "src": "20160:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 54675,
                          "name": "StaticConfig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53887,
                          "src": "19881:12:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_StaticConfig_$53887_storage_ptr_$",
                            "typeString": "type(struct EVM2EVMOnRamp.StaticConfig storage pointer)"
                          }
                        },
                        "id": 54683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "19904:9:49",
                          "19936:13:49",
                          "19976:17:49",
                          "20024:17:49",
                          "20072:15:49",
                          "20116:10:49",
                          "20150:8:49"
                        ],
                        "names": [
                          "linkToken",
                          "chainSelector",
                          "destChainSelector",
                          "defaultTxGasLimit",
                          "maxNopFeesJuels",
                          "prevOnRamp",
                          "armProxy"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "19881:298:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        }
                      },
                      {
                        "id": 54684,
                        "name": "dynamicConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54656,
                        "src": "20187:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_StaticConfig_$53887_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.StaticConfig memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig memory"
                        }
                      ],
                      "id": 54674,
                      "name": "ConfigSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53829,
                      "src": "19864:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_StaticConfig_$53887_memory_ptr_$_t_struct$_DynamicConfig_$53902_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.StaticConfig memory,struct EVM2EVMOnRamp.DynamicConfig memory)"
                      }
                    },
                    "id": 54685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19864:342:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54686,
                  "nodeType": "EmitStatement",
                  "src": "19859:347:49"
                }
              ]
            },
            "documentation": {
              "id": 54653,
              "nodeType": "StructuredDocumentation",
              "src": "19503:87:49",
              "text": "@notice Internal version of setDynamicConfig to allow for reuse in the constructor."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setDynamicConfig",
            "nameLocation": "19602:17:49",
            "parameters": {
              "id": 54657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54656,
                  "mutability": "mutable",
                  "name": "dynamicConfig",
                  "nameLocation": "19641:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54688,
                  "src": "19620:34:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                  },
                  "typeName": {
                    "id": 54655,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54654,
                      "name": "DynamicConfig",
                      "nameLocations": [
                        "19620:13:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53902,
                      "src": "19620:13:49"
                    },
                    "referencedDeclaration": 53902,
                    "src": "19620:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.DynamicConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19619:36:49"
            },
            "returnParameters": {
              "id": 54658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19665:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 54734,
            "nodeType": "FunctionDefinition",
            "src": "20459:301:49",
            "nodes": [],
            "body": {
              "id": 54733,
              "nodeType": "Block",
              "src": "20530:230:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54699
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54699,
                      "mutability": "mutable",
                      "name": "sourceTokens",
                      "nameLocation": "20553:12:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 54733,
                      "src": "20536:29:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20536:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54698,
                        "nodeType": "ArrayTypeName",
                        "src": "20536:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54707,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 54703,
                            "name": "s_poolsBySourceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53991,
                            "src": "20582:20:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                              "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                            }
                          },
                          "id": 54704,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "20603:6:49",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 101774,
                          "src": "20582:27:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                            "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 54705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20582:29:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "20568:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20572:7:49",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54701,
                        "nodeType": "ArrayTypeName",
                        "src": "20572:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 54706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20568:44:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20536:76:49"
                },
                {
                  "body": {
                    "id": 54729,
                    "nodeType": "Block",
                    "src": "20668:63:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 54727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "baseExpression": {
                                  "id": 54719,
                                  "name": "sourceTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54699,
                                  "src": "20677:12:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 54721,
                                "indexExpression": {
                                  "id": 54720,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54709,
                                  "src": "20690:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "20677:15:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              null
                            ],
                            "id": 54722,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "20676:19:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$__$",
                              "typeString": "tuple(address,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 54725,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54709,
                                "src": "20722:1:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 54723,
                                "name": "s_poolsBySourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53991,
                                "src": "20698:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                  "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                                }
                              },
                              "id": 54724,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "20719:2:49",
                              "memberName": "at",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 101807,
                              "src": "20698:23:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_uint256_$returns$_t_address_$_t_address_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                                "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,uint256) view returns (address,address)"
                              }
                            },
                            "id": 54726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20698:26:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "src": "20676:48:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54728,
                        "nodeType": "ExpressionStatement",
                        "src": "20676:48:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54712,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54709,
                      "src": "20638:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54713,
                        "name": "sourceTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54699,
                        "src": "20642:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 54714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20655:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "20642:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20638:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54730,
                  "initializationExpression": {
                    "assignments": [
                      54709
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54709,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "20631:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 54730,
                        "src": "20623:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54708,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20623:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54711,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20635:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "20623:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "20663:3:49",
                      "subExpression": {
                        "id": 54716,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54709,
                        "src": "20665:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54718,
                    "nodeType": "ExpressionStatement",
                    "src": "20663:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "20618:113:49"
                },
                {
                  "expression": {
                    "id": 54731,
                    "name": "sourceTokens",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54699,
                    "src": "20743:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 54694,
                  "id": 54732,
                  "nodeType": "Return",
                  "src": "20736:19:49"
                }
              ]
            },
            "baseFunctions": [
              49175
            ],
            "documentation": {
              "id": 54689,
              "nodeType": "StructuredDocumentation",
              "src": "20426:30:49",
              "text": "@inheritdoc IEVM2AnyOnRamp"
            },
            "functionSelector": "d3c7c2c7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSupportedTokens",
            "nameLocation": "20468:18:49",
            "parameters": {
              "id": 54690,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20486:2:49"
            },
            "returnParameters": {
              "id": 54694,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54693,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54734,
                  "src": "20512:16:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54691,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "20512:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 54692,
                    "nodeType": "ArrayTypeName",
                    "src": "20512:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20511:18:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54768,
            "nodeType": "FunctionDefinition",
            "src": "20797:249:49",
            "nodes": [],
            "body": {
              "id": 54767,
              "nodeType": "Block",
              "src": "20875:171:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 54751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "20885:52:49",
                    "subExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 54748,
                              "name": "sourceToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54738,
                              "src": "20924:11:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$103340",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$103340",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 54747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20916:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 54746,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "20916:7:49",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 54749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20916:20:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 54744,
                          "name": "s_poolsBySourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53991,
                          "src": "20886:20:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                            "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                          }
                        },
                        "id": 54745,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20907:8:49",
                        "memberName": "contains",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 101760,
                        "src": "20886:29:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                          "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 54750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20886:51:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54756,
                  "nodeType": "IfStatement",
                  "src": "20881:94:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 54753,
                          "name": "sourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54738,
                          "src": "20963:11:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$103340",
                            "typeString": "contract IERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20_$103340",
                            "typeString": "contract IERC20"
                          }
                        ],
                        "id": 54752,
                        "name": "UnsupportedToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53773,
                        "src": "20946:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_contract$_IERC20_$103340_$returns$__$",
                          "typeString": "function (contract IERC20) pure"
                        }
                      },
                      "id": 54754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20946:29:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54755,
                    "nodeType": "RevertStatement",
                    "src": "20939:36:49"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 54762,
                                "name": "sourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54738,
                                "src": "21027:11:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              ],
                              "id": 54761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21019:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 54760,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "21019:7:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 54763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21019:20:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 54758,
                            "name": "s_poolsBySourceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53991,
                            "src": "20994:20:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                              "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                            }
                          },
                          "id": 54759,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21015:3:49",
                          "memberName": "get",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 101855,
                          "src": "20994:24:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_address_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                            "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) view returns (address)"
                          }
                        },
                        "id": 54764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20994:46:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 54757,
                      "name": "IPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49425,
                      "src": "20988:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IPool_$49425_$",
                        "typeString": "type(contract IPool)"
                      }
                    },
                    "id": 54765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20988:53:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPool_$49425",
                      "typeString": "contract IPool"
                    }
                  },
                  "functionReturnParameters": 54743,
                  "id": 54766,
                  "nodeType": "Return",
                  "src": "20981:60:49"
                }
              ]
            },
            "baseFunctions": [
              49168
            ],
            "documentation": {
              "id": 54735,
              "nodeType": "StructuredDocumentation",
              "src": "20764:30:49",
              "text": "@inheritdoc IEVM2AnyOnRamp"
            },
            "functionSelector": "5d86f141",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolBySourceToken",
            "nameLocation": "20806:20:49",
            "parameters": {
              "id": 54739,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54738,
                  "mutability": "mutable",
                  "name": "sourceToken",
                  "nameLocation": "20834:11:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54768,
                  "src": "20827:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$103340",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 54737,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54736,
                      "name": "IERC20",
                      "nameLocations": [
                        "20827:6:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 103340,
                      "src": "20827:6:49"
                    },
                    "referencedDeclaration": 103340,
                    "src": "20827:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$103340",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20826:20:49"
            },
            "returnParameters": {
              "id": 54743,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54742,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54768,
                  "src": "20868:5:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPool_$49425",
                    "typeString": "contract IPool"
                  },
                  "typeName": {
                    "id": 54741,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54740,
                      "name": "IPool",
                      "nameLocations": [
                        "20868:5:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49425,
                      "src": "20868:5:49"
                    },
                    "referencedDeclaration": 49425,
                    "src": "20868:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPool_$49425",
                      "typeString": "contract IPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20867:7:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 54788,
            "nodeType": "FunctionDefinition",
            "src": "21155:173:49",
            "nodes": [],
            "body": {
              "id": 54787,
              "nodeType": "Block",
              "src": "21285:43:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54783,
                        "name": "removes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54773,
                        "src": "21309:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      },
                      {
                        "id": 54784,
                        "name": "adds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54777,
                        "src": "21318:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      ],
                      "id": 54782,
                      "name": "_applyPoolUpdates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54932,
                      "src": "21291:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct Internal.PoolUpdate memory[] memory,struct Internal.PoolUpdate memory[] memory)"
                      }
                    },
                    "id": 54785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21291:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54786,
                  "nodeType": "ExpressionStatement",
                  "src": "21291:32:49"
                }
              ]
            },
            "baseFunctions": [
              49201
            ],
            "documentation": {
              "id": 54769,
              "nodeType": "StructuredDocumentation",
              "src": "21050:102:49",
              "text": "@inheritdoc IEVM2AnyOnRamp\n @dev This method can only be called by the owner of the contract."
            },
            "functionSelector": "3a87ac53",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54780,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54779,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "21275:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 101659,
                  "src": "21275:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "21275:9:49"
              }
            ],
            "name": "applyPoolUpdates",
            "nameLocation": "21164:16:49",
            "parameters": {
              "id": 54778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54773,
                  "mutability": "mutable",
                  "name": "removes",
                  "nameLocation": "21215:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54788,
                  "src": "21186:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Internal.PoolUpdate[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54771,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54770,
                        "name": "Internal.PoolUpdate",
                        "nameLocations": [
                          "21186:8:49",
                          "21195:10:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49510,
                        "src": "21186:19:49"
                      },
                      "referencedDeclaration": 49510,
                      "src": "21186:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                        "typeString": "struct Internal.PoolUpdate"
                      }
                    },
                    "id": 54772,
                    "nodeType": "ArrayTypeName",
                    "src": "21186:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                      "typeString": "struct Internal.PoolUpdate[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54777,
                  "mutability": "mutable",
                  "name": "adds",
                  "nameLocation": "21257:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54788,
                  "src": "21228:33:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Internal.PoolUpdate[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54775,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54774,
                        "name": "Internal.PoolUpdate",
                        "nameLocations": [
                          "21228:8:49",
                          "21237:10:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49510,
                        "src": "21228:19:49"
                      },
                      "referencedDeclaration": 49510,
                      "src": "21228:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                        "typeString": "struct Internal.PoolUpdate"
                      }
                    },
                    "id": 54776,
                    "nodeType": "ArrayTypeName",
                    "src": "21228:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                      "typeString": "struct Internal.PoolUpdate[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21180:85:49"
            },
            "returnParameters": {
              "id": 54781,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21285:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54932,
            "nodeType": "FunctionDefinition",
            "src": "21332:947:49",
            "nodes": [],
            "body": {
              "id": 54931,
              "nodeType": "Block",
              "src": "21441:838:49",
              "nodes": [],
              "statements": [
                {
                  "body": {
                    "id": 54855,
                    "nodeType": "Block",
                    "src": "21492:342:49",
                    "statements": [
                      {
                        "assignments": [
                          54811
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54811,
                            "mutability": "mutable",
                            "name": "token",
                            "nameLocation": "21508:5:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 54855,
                            "src": "21500:13:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 54810,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21500:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54816,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 54812,
                              "name": "removes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54792,
                              "src": "21516:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct Internal.PoolUpdate memory[] memory"
                              }
                            },
                            "id": 54814,
                            "indexExpression": {
                              "id": 54813,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54800,
                              "src": "21524:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21516:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolUpdate_$49510_memory_ptr",
                              "typeString": "struct Internal.PoolUpdate memory"
                            }
                          },
                          "id": 54815,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21527:5:49",
                          "memberName": "token",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49507,
                          "src": "21516:16:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21500:32:49"
                      },
                      {
                        "assignments": [
                          54818
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54818,
                            "mutability": "mutable",
                            "name": "pool",
                            "nameLocation": "21548:4:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 54855,
                            "src": "21540:12:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 54817,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21540:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54823,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 54819,
                              "name": "removes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54792,
                              "src": "21555:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct Internal.PoolUpdate memory[] memory"
                              }
                            },
                            "id": 54821,
                            "indexExpression": {
                              "id": 54820,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54800,
                              "src": "21563:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21555:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolUpdate_$49510_memory_ptr",
                              "typeString": "struct Internal.PoolUpdate memory"
                            }
                          },
                          "id": 54822,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21566:4:49",
                          "memberName": "pool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49509,
                          "src": "21555:15:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21540:30:49"
                      },
                      {
                        "condition": {
                          "id": 54828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "21583:37:49",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 54826,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54811,
                                "src": "21614:5:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 54824,
                                "name": "s_poolsBySourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53991,
                                "src": "21584:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                  "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                                }
                              },
                              "id": 54825,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21605:8:49",
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 101760,
                              "src": "21584:29:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                                "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 54827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21584:36:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54833,
                        "nodeType": "IfStatement",
                        "src": "21579:73:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 54830,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54811,
                                "src": "21646:5:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 54829,
                              "name": "PoolDoesNotExist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53785,
                              "src": "21629:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 54831,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21629:23:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 54832,
                          "nodeType": "RevertStatement",
                          "src": "21622:30:49"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 54839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 54836,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54811,
                                "src": "21689:5:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 54834,
                                "name": "s_poolsBySourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53991,
                                "src": "21664:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                  "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                                }
                              },
                              "id": 54835,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21685:3:49",
                              "memberName": "get",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 101855,
                              "src": "21664:24:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_address_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                                "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) view returns (address)"
                              }
                            },
                            "id": 54837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21664:31:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 54838,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54818,
                            "src": "21699:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "21664:39:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54843,
                        "nodeType": "IfStatement",
                        "src": "21660:71:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 54840,
                              "name": "TokenPoolMismatch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53787,
                              "src": "21712:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 54841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21712:19:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 54842,
                          "nodeType": "RevertStatement",
                          "src": "21705:26:49"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 54846,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54811,
                              "src": "21772:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 54844,
                              "name": "s_poolsBySourceToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53991,
                              "src": "21744:20:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                              }
                            },
                            "id": 54845,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "21765:6:49",
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 101737,
                            "src": "21744:27:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                              "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 54847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21744:34:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54854,
                        "nodeType": "IfStatement",
                        "src": "21740:88:49",
                        "trueBody": {
                          "id": 54853,
                          "nodeType": "Block",
                          "src": "21780:48:49",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 54849,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54811,
                                    "src": "21807:5:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 54850,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54818,
                                    "src": "21814:4:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 54848,
                                  "name": "PoolRemoved",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53872,
                                  "src": "21795:11:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address)"
                                  }
                                },
                                "id": 54851,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21795:24:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54852,
                              "nodeType": "EmitStatement",
                              "src": "21790:29:49"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54803,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54800,
                      "src": "21467:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54804,
                        "name": "removes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54792,
                        "src": "21471:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      },
                      "id": 54805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21479:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "21471:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21467:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54856,
                  "initializationExpression": {
                    "assignments": [
                      54800
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54800,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "21460:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 54856,
                        "src": "21452:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54799,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21452:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54802,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21464:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "21452:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54808,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "21487:3:49",
                      "subExpression": {
                        "id": 54807,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54800,
                        "src": "21489:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54809,
                    "nodeType": "ExpressionStatement",
                    "src": "21487:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "21447:387:49"
                },
                {
                  "body": {
                    "id": 54929,
                    "nodeType": "Block",
                    "src": "21882:393:49",
                    "statements": [
                      {
                        "assignments": [
                          54869
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54869,
                            "mutability": "mutable",
                            "name": "token",
                            "nameLocation": "21898:5:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 54929,
                            "src": "21890:13:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 54868,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21890:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54874,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 54870,
                              "name": "adds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54796,
                              "src": "21906:4:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct Internal.PoolUpdate memory[] memory"
                              }
                            },
                            "id": 54872,
                            "indexExpression": {
                              "id": 54871,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54858,
                              "src": "21911:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21906:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolUpdate_$49510_memory_ptr",
                              "typeString": "struct Internal.PoolUpdate memory"
                            }
                          },
                          "id": 54873,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21914:5:49",
                          "memberName": "token",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49507,
                          "src": "21906:13:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21890:29:49"
                      },
                      {
                        "assignments": [
                          54876
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54876,
                            "mutability": "mutable",
                            "name": "pool",
                            "nameLocation": "21935:4:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 54929,
                            "src": "21927:12:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 54875,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "21927:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54881,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 54877,
                              "name": "adds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54796,
                              "src": "21942:4:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct Internal.PoolUpdate memory[] memory"
                              }
                            },
                            "id": 54879,
                            "indexExpression": {
                              "id": 54878,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54858,
                              "src": "21947:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21942:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolUpdate_$49510_memory_ptr",
                              "typeString": "struct Internal.PoolUpdate memory"
                            }
                          },
                          "id": 54880,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21950:4:49",
                          "memberName": "pool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49509,
                          "src": "21942:12:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21927:27:49"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 54894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 54887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 54882,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54869,
                              "src": "21967:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 54885,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "21984:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 54884,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "21976:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 54883,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21976:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 54886,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21976:10:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "21967:19:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 54893,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 54888,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54876,
                              "src": "21990:4:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 54891,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "22006:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 54890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "21998:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 54889,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21998:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 54892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21998:10:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "21990:18:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "21967:41:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54898,
                        "nodeType": "IfStatement",
                        "src": "21963:78:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 54895,
                              "name": "InvalidTokenPoolConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53779,
                              "src": "22017:22:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 54896,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22017:24:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 54897,
                          "nodeType": "RevertStatement",
                          "src": "22010:31:49"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 54908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 54899,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54869,
                            "src": "22053:5:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 54903,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 54876,
                                        "src": "22076:4:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 54902,
                                      "name": "IPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 49425,
                                      "src": "22070:5:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IPool_$49425_$",
                                        "typeString": "type(contract IPool)"
                                      }
                                    },
                                    "id": 54904,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "22070:11:49",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IPool_$49425",
                                      "typeString": "contract IPool"
                                    }
                                  },
                                  "id": 54905,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "22082:8:49",
                                  "memberName": "getToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 49424,
                                  "src": "22070:20:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20_$103340_$",
                                    "typeString": "function () view external returns (contract IERC20)"
                                  }
                                },
                                "id": 54906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22070:22:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              ],
                              "id": 54901,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22062:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 54900,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "22062:7:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 54907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22062:31:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22053:40:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54912,
                        "nodeType": "IfStatement",
                        "src": "22049:72:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 54909,
                              "name": "TokenPoolMismatch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53787,
                              "src": "22102:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 54910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22102:19:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 54911,
                          "nodeType": "RevertStatement",
                          "src": "22095:26:49"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 54915,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54869,
                              "src": "22159:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 54916,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54876,
                              "src": "22166:4:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 54913,
                              "name": "s_poolsBySourceToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53991,
                              "src": "22134:20:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                              }
                            },
                            "id": 54914,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "22155:3:49",
                            "memberName": "set",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 101714,
                            "src": "22134:24:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                              "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address,address) returns (bool)"
                            }
                          },
                          "id": 54917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22134:37:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54927,
                          "nodeType": "Block",
                          "src": "22225:44:49",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 54924,
                                  "name": "PoolAlreadyAdded",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53781,
                                  "src": "22242:16:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 54925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22242:18:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54926,
                              "nodeType": "RevertStatement",
                              "src": "22235:25:49"
                            }
                          ]
                        },
                        "id": 54928,
                        "nodeType": "IfStatement",
                        "src": "22130:139:49",
                        "trueBody": {
                          "id": 54923,
                          "nodeType": "Block",
                          "src": "22173:46:49",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 54919,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54869,
                                    "src": "22198:5:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 54920,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54876,
                                    "src": "22205:4:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 54918,
                                  "name": "PoolAdded",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53866,
                                  "src": "22188:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address)"
                                  }
                                },
                                "id": 54921,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22188:22:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54922,
                              "nodeType": "EmitStatement",
                              "src": "22183:27:49"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54861,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54858,
                      "src": "21860:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54862,
                        "name": "adds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54796,
                        "src": "21864:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Internal.PoolUpdate memory[] memory"
                        }
                      },
                      "id": 54863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21869:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "21864:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21860:15:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54930,
                  "initializationExpression": {
                    "assignments": [
                      54858
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54858,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "21853:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 54930,
                        "src": "21845:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21845:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54860,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21857:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "21845:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "21877:3:49",
                      "subExpression": {
                        "id": 54865,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54858,
                        "src": "21879:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54867,
                    "nodeType": "ExpressionStatement",
                    "src": "21877:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "21840:435:49"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_applyPoolUpdates",
            "nameLocation": "21341:17:49",
            "parameters": {
              "id": 54797,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54792,
                  "mutability": "mutable",
                  "name": "removes",
                  "nameLocation": "21388:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54932,
                  "src": "21359:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Internal.PoolUpdate[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54790,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54789,
                        "name": "Internal.PoolUpdate",
                        "nameLocations": [
                          "21359:8:49",
                          "21368:10:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49510,
                        "src": "21359:19:49"
                      },
                      "referencedDeclaration": 49510,
                      "src": "21359:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                        "typeString": "struct Internal.PoolUpdate"
                      }
                    },
                    "id": 54791,
                    "nodeType": "ArrayTypeName",
                    "src": "21359:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                      "typeString": "struct Internal.PoolUpdate[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54796,
                  "mutability": "mutable",
                  "name": "adds",
                  "nameLocation": "21426:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 54932,
                  "src": "21397:33:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Internal.PoolUpdate[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54794,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54793,
                        "name": "Internal.PoolUpdate",
                        "nameLocations": [
                          "21397:8:49",
                          "21406:10:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49510,
                        "src": "21397:19:49"
                      },
                      "referencedDeclaration": 49510,
                      "src": "21397:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolUpdate_$49510_storage_ptr",
                        "typeString": "struct Internal.PoolUpdate"
                      }
                    },
                    "id": 54795,
                    "nodeType": "ArrayTypeName",
                    "src": "21397:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_PoolUpdate_$49510_storage_$dyn_storage_ptr",
                      "typeString": "struct Internal.PoolUpdate[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21358:73:49"
            },
            "returnParameters": {
              "id": 54798,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21441:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55074,
            "nodeType": "FunctionDefinition",
            "src": "22649:2379:49",
            "nodes": [],
            "body": {
              "id": 55073,
              "nodeType": "Block",
              "src": "22737:2291:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54945,
                      "mutability": "mutable",
                      "name": "extraArgs",
                      "nameLocation": "22772:9:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "22743:38:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                        "typeString": "struct Client.EVMExtraArgsV1"
                      },
                      "typeName": {
                        "id": 54944,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54943,
                          "name": "Client.EVMExtraArgsV1",
                          "nameLocations": [
                            "22743:6:49",
                            "22750:14:49"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 49464,
                          "src": "22743:21:49"
                        },
                        "referencedDeclaration": 49464,
                        "src": "22743:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_storage_ptr",
                          "typeString": "struct Client.EVMExtraArgsV1"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54950,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54947,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54936,
                          "src": "22795:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54948,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22803:9:49",
                        "memberName": "extraArgs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49457,
                        "src": "22795:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 54946,
                      "name": "_fromBytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54560,
                      "src": "22784:10:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_calldata_ptr_$returns$_t_struct$_EVMExtraArgsV1_$49464_memory_ptr_$",
                        "typeString": "function (bytes calldata) view returns (struct Client.EVMExtraArgsV1 memory)"
                      }
                    },
                    "id": 54949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22784:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                      "typeString": "struct Client.EVMExtraArgsV1 memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22743:70:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 54952,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54936,
                            "src": "22884:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22892:4:49",
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49449,
                          "src": "22884:12:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 54954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22897:6:49",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "22884:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 54955,
                          "name": "extraArgs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54945,
                          "src": "22905:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                            "typeString": "struct Client.EVMExtraArgsV1 memory"
                          }
                        },
                        "id": 54956,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22915:8:49",
                        "memberName": "gasLimit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49463,
                        "src": "22905:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 54957,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54936,
                            "src": "22925:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22933:12:49",
                          "memberName": "tokenAmounts",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49453,
                          "src": "22925:20:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                          }
                        },
                        "id": 54959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22946:6:49",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "22925:27:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54951,
                      "name": "_validateMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54610,
                      "src": "22867:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) view"
                      }
                    },
                    "id": 54960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22867:86:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54961,
                  "nodeType": "ExpressionStatement",
                  "src": "22867:86:49"
                },
                {
                  "assignments": [
                    54964
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54964,
                      "mutability": "mutable",
                      "name": "feeTokenConfig",
                      "nameLocation": "22982:14:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "22960:36:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                        "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                      },
                      "typeName": {
                        "id": 54963,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54962,
                          "name": "FeeTokenConfig",
                          "nameLocations": [
                            "22960:14:49"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 53915,
                          "src": "22960:14:49"
                        },
                        "referencedDeclaration": 53915,
                        "src": "22960:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54969,
                  "initialValue": {
                    "baseExpression": {
                      "id": 54965,
                      "name": "s_feeTokenConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54001,
                      "src": "22999:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_FeeTokenConfig_$53915_storage_$",
                        "typeString": "mapping(address => struct EVM2EVMOnRamp.FeeTokenConfig storage ref)"
                      }
                    },
                    "id": 54968,
                    "indexExpression": {
                      "expression": {
                        "id": 54966,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54936,
                        "src": "23016:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                          "typeString": "struct Client.EVM2AnyMessage calldata"
                        }
                      },
                      "id": 54967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23024:8:49",
                      "memberName": "feeToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49455,
                      "src": "23016:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22999:34:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22960:73:49"
                },
                {
                  "condition": {
                    "id": 54972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "23043:23:49",
                    "subExpression": {
                      "expression": {
                        "id": 54970,
                        "name": "feeTokenConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54964,
                        "src": "23044:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                        }
                      },
                      "id": 54971,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23059:7:49",
                      "memberName": "enabled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53914,
                      "src": "23044:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54978,
                  "nodeType": "IfStatement",
                  "src": "23039:66:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 54974,
                            "name": "message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54936,
                            "src": "23088:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                              "typeString": "struct Client.EVM2AnyMessage calldata"
                            }
                          },
                          "id": 54975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "23096:8:49",
                          "memberName": "feeToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 49455,
                          "src": "23088:16:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 54973,
                        "name": "NotAFeeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53809,
                        "src": "23075:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 54976,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23075:30:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 54977,
                    "nodeType": "RevertStatement",
                    "src": "23068:37:49"
                  }
                },
                {
                  "assignments": [
                    54980,
                    54982
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54980,
                      "mutability": "mutable",
                      "name": "feeTokenPrice",
                      "nameLocation": "23121:13:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "23113:21:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint192",
                        "typeString": "uint192"
                      },
                      "typeName": {
                        "id": 54979,
                        "name": "uint192",
                        "nodeType": "ElementaryTypeName",
                        "src": "23113:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 54982,
                      "mutability": "mutable",
                      "name": "gasPrice",
                      "nameLocation": "23144:8:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "23136:16:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint192",
                        "typeString": "uint192"
                      },
                      "typeName": {
                        "id": 54981,
                        "name": "uint192",
                        "nodeType": "ElementaryTypeName",
                        "src": "23136:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54992,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54988,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54936,
                          "src": "23230:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 54989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23238:8:49",
                        "memberName": "feeToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49455,
                        "src": "23230:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 54990,
                        "name": "i_destChainSelector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53969,
                        "src": "23254:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 54984,
                              "name": "s_dynamicConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53983,
                              "src": "23171:15:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                              }
                            },
                            "id": 54985,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "23187:13:49",
                            "memberName": "priceRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53897,
                            "src": "23171:29:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 54983,
                          "name": "IPriceRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49288,
                          "src": "23156:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPriceRegistry_$49288_$",
                            "typeString": "type(contract IPriceRegistry)"
                          }
                        },
                        "id": 54986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23156:45:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceRegistry_$49288",
                          "typeString": "contract IPriceRegistry"
                        }
                      },
                      "id": 54987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23202:20:49",
                      "memberName": "getTokenAndGasPrices",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49275,
                      "src": "23156:66:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint64_$returns$_t_uint192_$_t_uint192_$",
                        "typeString": "function (address,uint64) view external returns (uint192,uint192)"
                      }
                    },
                    "id": 54991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23156:123:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint192_$_t_uint192_$",
                      "typeString": "tuple(uint192,uint192)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23112:167:49"
                },
                {
                  "assignments": [
                    54994
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54994,
                      "mutability": "mutable",
                      "name": "premiumFeeUSD",
                      "nameLocation": "23515:13:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "23507:21:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 54993,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23507:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54996,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 54995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "23531:1:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23507:25:49"
                },
                {
                  "assignments": [
                    54998
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54998,
                      "mutability": "mutable",
                      "name": "tokenTransferGas",
                      "nameLocation": "23545:16:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "23538:23:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 54997,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "23538:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55000,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 54999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "23564:1:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23538:27:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 55001,
                          "name": "message",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54936,
                          "src": "23575:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                            "typeString": "struct Client.EVM2AnyMessage calldata"
                          }
                        },
                        "id": 55002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23583:12:49",
                        "memberName": "tokenAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 49453,
                        "src": "23575:20:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                        }
                      },
                      "id": 55003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23596:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "23575:27:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 55004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23605:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23575:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 55030,
                    "nodeType": "Block",
                    "src": "23797:135:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 55028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 55020,
                            "name": "premiumFeeUSD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54994,
                            "src": "23865:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 55027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 55023,
                                    "name": "feeTokenConfig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54964,
                                    "src": "23889:14:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                                    }
                                  },
                                  "id": 55024,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "23904:13:49",
                                  "memberName": "networkFeeUSD",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 53904,
                                  "src": "23889:28:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "id": 55022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "23881:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 55021,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "23881:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 55025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23881:37:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "31653136",
                              "id": 55026,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23921:4:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10000000000000000_by_1",
                                "typeString": "int_const 10000000000000000"
                              },
                              "value": "1e16"
                            },
                            "src": "23881:44:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23865:60:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 55029,
                        "nodeType": "ExpressionStatement",
                        "src": "23865:60:49"
                      }
                    ]
                  },
                  "id": 55031,
                  "nodeType": "IfStatement",
                  "src": "23571:361:49",
                  "trueBody": {
                    "id": 55019,
                    "nodeType": "Block",
                    "src": "23608:183:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 55017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 55006,
                                "name": "premiumFeeUSD",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54994,
                                "src": "23617:13:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 55007,
                                "name": "tokenTransferGas",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54998,
                                "src": "23632:16:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "id": 55008,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "23616:33:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$",
                              "typeString": "tuple(uint256,uint32)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 55010,
                                  "name": "message",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54936,
                                  "src": "23683:7:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                    "typeString": "struct Client.EVM2AnyMessage calldata"
                                  }
                                },
                                "id": 55011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "23691:8:49",
                                "memberName": "feeToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 49455,
                                "src": "23683:16:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 55012,
                                "name": "feeTokenPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54980,
                                "src": "23709:13:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55013,
                                  "name": "message",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54936,
                                  "src": "23732:7:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                    "typeString": "struct Client.EVM2AnyMessage calldata"
                                  }
                                },
                                "id": 55014,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "23740:12:49",
                                "memberName": "tokenAmounts",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 49453,
                                "src": "23732:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                                }
                              },
                              {
                                "id": 55015,
                                "name": "feeTokenConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54964,
                                "src": "23762:14:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                                }
                              ],
                              "id": 55009,
                              "name": "_getTokenTransferCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55243,
                              "src": "23652:21:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint192_$_t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr_$_t_struct$_FeeTokenConfig_$53915_memory_ptr_$returns$_t_uint256_$_t_uint32_$",
                                "typeString": "function (address,uint192,struct Client.EVMTokenAmount calldata[] calldata,struct EVM2EVMOnRamp.FeeTokenConfig memory) view returns (uint256,uint32)"
                              }
                            },
                            "id": 55016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23652:132:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$",
                              "typeString": "tuple(uint256,uint32)"
                            }
                          },
                          "src": "23616:168:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55018,
                        "nodeType": "ExpressionStatement",
                        "src": "23616:168:49"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 55037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55032,
                      "name": "premiumFeeUSD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54994,
                      "src": "24022:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 55036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 55033,
                        "name": "premiumFeeUSD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54994,
                        "src": "24038:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "expression": {
                          "id": 55034,
                          "name": "feeTokenConfig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54964,
                          "src": "24054:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                            "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                          }
                        },
                        "id": 55035,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24069:17:49",
                        "memberName": "premiumMultiplier",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53912,
                        "src": "24054:32:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "24038:48:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24022:64:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 55038,
                  "nodeType": "ExpressionStatement",
                  "src": "24022:64:49"
                },
                {
                  "assignments": [
                    55040
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55040,
                      "mutability": "mutable",
                      "name": "executionCostUSD",
                      "nameLocation": "24368:16:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55073,
                      "src": "24360:24:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55039,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24360:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55062,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55041,
                      "name": "gasPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54982,
                      "src": "24387:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint192",
                        "typeString": "uint192"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 55059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 55055,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 55053,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 55046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 55042,
                                        "name": "extraArgs",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 54945,
                                        "src": "24406:9:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_EVMExtraArgsV1_$49464_memory_ptr",
                                          "typeString": "struct Client.EVMExtraArgsV1 memory"
                                        }
                                      },
                                      "id": 55043,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "24416:8:49",
                                      "memberName": "gasLimit",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 49463,
                                      "src": "24406:18:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 55044,
                                        "name": "s_dynamicConfig",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 53983,
                                        "src": "24435:15:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                                        }
                                      },
                                      "id": 55045,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "24451:15:49",
                                      "memberName": "destGasOverhead",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 53893,
                                      "src": "24435:31:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "src": "24406:60:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 55052,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "expression": {
                                          "id": 55047,
                                          "name": "message",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 54936,
                                          "src": "24477:7:49",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                                            "typeString": "struct Client.EVM2AnyMessage calldata"
                                          }
                                        },
                                        "id": 55048,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "24485:4:49",
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 49449,
                                        "src": "24477:12:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                          "typeString": "bytes calldata"
                                        }
                                      },
                                      "id": 55049,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "24490:6:49",
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "24477:19:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 55050,
                                        "name": "s_dynamicConfig",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 53983,
                                        "src": "24507:15:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                          "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                                        }
                                      },
                                      "id": 55051,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "24523:21:49",
                                      "memberName": "destGasPerPayloadByte",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 53895,
                                      "src": "24507:37:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "src": "24477:67:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "24406:138:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 55054,
                                  "name": "tokenTransferGas",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54998,
                                  "src": "24555:16:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "24406:165:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 55056,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "24405:167:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 55057,
                              "name": "feeTokenConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54964,
                              "src": "24575:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                              }
                            },
                            "id": 55058,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "24590:13:49",
                            "memberName": "gasMultiplier",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53910,
                            "src": "24575:28:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "24405:198:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 55060,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24404:200:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24387:217:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24360:244:49"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 55070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 55067,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 55065,
                                "name": "premiumFeeUSD",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54994,
                                "src": "24979:13:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 55066,
                                "name": "executionCostUSD",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55040,
                                "src": "24995:16:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24979:32:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 55068,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "24978:34:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 55069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "25015:7:49",
                          "subdenomination": "ether",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1000000000000000000_by_1",
                            "typeString": "int_const 1000000000000000000"
                          },
                          "value": "1"
                        },
                        "src": "24978:44:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 55063,
                        "name": "feeTokenPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54980,
                        "src": "24935:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      },
                      "id": 55064,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24949:28:49",
                      "memberName": "_calcTokenAmountFromUSDValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 50355,
                      "src": "24935:42:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint192_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint192_$",
                        "typeString": "function (uint192,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 55071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24935:88:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 54940,
                  "id": 55072,
                  "nodeType": "Return",
                  "src": "24928:95:49"
                }
              ]
            },
            "baseFunctions": [
              49158
            ],
            "documentation": {
              "id": 54933,
              "nodeType": "StructuredDocumentation",
              "src": "22494:152:49",
              "text": "@inheritdoc IEVM2AnyOnRamp\n @dev getFee MUST revert if the feeToken is not listed in the fee token config.\n as the router assumes it does."
            },
            "functionSelector": "38724a95",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFee",
            "nameLocation": "22658:6:49",
            "parameters": {
              "id": 54937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54936,
                  "mutability": "mutable",
                  "name": "message",
                  "nameLocation": "22696:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55074,
                  "src": "22665:38:49",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_calldata_ptr",
                    "typeString": "struct Client.EVM2AnyMessage"
                  },
                  "typeName": {
                    "id": 54935,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 54934,
                      "name": "Client.EVM2AnyMessage",
                      "nameLocations": [
                        "22665:6:49",
                        "22672:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 49458,
                      "src": "22665:21:49"
                    },
                    "referencedDeclaration": 49458,
                    "src": "22665:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_EVM2AnyMessage_$49458_storage_ptr",
                      "typeString": "struct Client.EVM2AnyMessage"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22664:40:49"
            },
            "returnParameters": {
              "id": 54940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54939,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55074,
                  "src": "22728:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22728:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22727:9:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55243,
            "nodeType": "FunctionDefinition",
            "src": "25526:2206:49",
            "nodes": [],
            "body": {
              "id": 55242,
              "nodeType": "Block",
              "src": "25780:1952:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55094,
                      "mutability": "mutable",
                      "name": "numberOfTokens",
                      "nameLocation": "25794:14:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55242,
                      "src": "25786:22:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55093,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25786:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55097,
                  "initialValue": {
                    "expression": {
                      "id": 55095,
                      "name": "tokenAmounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55083,
                      "src": "25811:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                        "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                      }
                    },
                    "id": 55096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "25824:6:49",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "25811:19:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25786:44:49"
                },
                {
                  "body": {
                    "id": 55198,
                    "nodeType": "Block",
                    "src": "25882:1237:49",
                    "statements": [
                      {
                        "assignments": [
                          55112
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55112,
                            "mutability": "mutable",
                            "name": "tokenAmount",
                            "nameLocation": "25919:11:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55198,
                            "src": "25890:40:49",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                              "typeString": "struct Client.EVMTokenAmount"
                            },
                            "typeName": {
                              "id": 55111,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 55110,
                                "name": "Client.EVMTokenAmount",
                                "nameLocations": [
                                  "25890:6:49",
                                  "25897:14:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 49432,
                                "src": "25890:21:49"
                              },
                              "referencedDeclaration": 49432,
                              "src": "25890:21:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_storage_ptr",
                                "typeString": "struct Client.EVMTokenAmount"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55116,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55113,
                            "name": "tokenAmounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55083,
                            "src": "25933:12:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "struct Client.EVMTokenAmount calldata[] calldata"
                            }
                          },
                          "id": 55115,
                          "indexExpression": {
                            "id": 55114,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55099,
                            "src": "25946:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25933:15:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_calldata_ptr",
                            "typeString": "struct Client.EVMTokenAmount calldata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25890:58:49"
                      },
                      {
                        "assignments": [
                          55119
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55119,
                            "mutability": "mutable",
                            "name": "transferFeeConfig",
                            "nameLocation": "25986:17:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55198,
                            "src": "25956:47:49",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig"
                            },
                            "typeName": {
                              "id": 55118,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 55117,
                                "name": "TokenTransferFeeConfig",
                                "nameLocations": [
                                  "25956:22:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 53935,
                                "src": "25956:22:49"
                              },
                              "referencedDeclaration": 53935,
                              "src": "25956:22:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage_ptr",
                                "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55124,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55120,
                            "name": "s_tokenTransferFeeConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54007,
                            "src": "26006:24:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenTransferFeeConfig_$53935_storage_$",
                              "typeString": "mapping(address => struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref)"
                            }
                          },
                          "id": 55123,
                          "indexExpression": {
                            "expression": {
                              "id": 55121,
                              "name": "tokenAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55112,
                              "src": "26031:11:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                "typeString": "struct Client.EVMTokenAmount memory"
                              }
                            },
                            "id": 55122,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "26043:5:49",
                            "memberName": "token",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 49429,
                            "src": "26031:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26006:43:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage",
                            "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25956:93:49"
                      },
                      {
                        "condition": {
                          "id": 55130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "26152:49:49",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 55127,
                                  "name": "tokenAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55112,
                                  "src": "26183:11:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                    "typeString": "struct Client.EVMTokenAmount memory"
                                  }
                                },
                                "id": 55128,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26195:5:49",
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 49429,
                                "src": "26183:17:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 55125,
                                "name": "s_poolsBySourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53991,
                                "src": "26153:20:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressToAddressMap_$101688_storage",
                                  "typeString": "struct EnumerableMapAddresses.AddressToAddressMap storage ref"
                                }
                              },
                              "id": 55126,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26174:8:49",
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 101760,
                              "src": "26153:29:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToAddressMap_$101688_storage_ptr_$",
                                "typeString": "function (struct EnumerableMapAddresses.AddressToAddressMap storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 55129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26153:48:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55138,
                        "nodeType": "IfStatement",
                        "src": "26148:105:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 55133,
                                      "name": "tokenAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 55112,
                                      "src": "26234:11:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                        "typeString": "struct Client.EVMTokenAmount memory"
                                      }
                                    },
                                    "id": 55134,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "26246:5:49",
                                    "memberName": "token",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 49429,
                                    "src": "26234:17:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 55132,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 103340,
                                  "src": "26227:6:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 55135,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26227:25:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$103340",
                                  "typeString": "contract IERC20"
                                }
                              ],
                              "id": 55131,
                              "name": "UnsupportedToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53773,
                              "src": "26210:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_contract$_IERC20_$103340_$returns$__$",
                                "typeString": "function (contract IERC20) pure"
                              }
                            },
                            "id": 55136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26210:43:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 55137,
                          "nodeType": "RevertStatement",
                          "src": "26203:50:49"
                        }
                      },
                      {
                        "assignments": [
                          55140
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55140,
                            "mutability": "mutable",
                            "name": "bpsFeeUSD",
                            "nameLocation": "26270:9:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55198,
                            "src": "26262:17:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 55139,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "26262:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55142,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 55141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26282:1:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "26262:21:49"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 55146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 55143,
                              "name": "transferFeeConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55119,
                              "src": "26482:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig memory"
                              }
                            },
                            "id": 55144,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "26500:5:49",
                            "memberName": "ratio",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53932,
                            "src": "26482:23:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 55145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26508:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "26482:27:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55188,
                        "nodeType": "IfStatement",
                        "src": "26478:533:49",
                        "trueBody": {
                          "id": 55187,
                          "nodeType": "Block",
                          "src": "26511:500:49",
                          "statements": [
                            {
                              "assignments": [
                                55148
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 55148,
                                  "mutability": "mutable",
                                  "name": "tokenPrice",
                                  "nameLocation": "26529:10:49",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 55187,
                                  "src": "26521:18:49",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint192",
                                    "typeString": "uint192"
                                  },
                                  "typeName": {
                                    "id": 55147,
                                    "name": "uint192",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "26521:7:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint192",
                                      "typeString": "uint192"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 55150,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 55149,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26542:1:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "26521:22:49"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 55154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 55151,
                                    "name": "tokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 55112,
                                    "src": "26557:11:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                      "typeString": "struct Client.EVMTokenAmount memory"
                                    }
                                  },
                                  "id": 55152,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "26569:5:49",
                                  "memberName": "token",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 49429,
                                  "src": "26557:17:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 55153,
                                  "name": "feeToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55077,
                                  "src": "26578:8:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "26557:29:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 55171,
                                "nodeType": "Block",
                                "src": "26717:49:49",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 55169,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 55167,
                                        "name": "tokenPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 55148,
                                        "src": "26729:10:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint192",
                                          "typeString": "uint192"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 55168,
                                        "name": "feeTokenPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 55079,
                                        "src": "26742:13:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint192",
                                          "typeString": "uint192"
                                        }
                                      },
                                      "src": "26729:26:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      }
                                    },
                                    "id": 55170,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26729:26:49"
                                  }
                                ]
                              },
                              "id": 55172,
                              "nodeType": "IfStatement",
                              "src": "26553:213:49",
                              "trueBody": {
                                "id": 55166,
                                "nodeType": "Block",
                                "src": "26588:123:49",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 55164,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 55155,
                                        "name": "tokenPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 55148,
                                        "src": "26600:10:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint192",
                                          "typeString": "uint192"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "expression": {
                                              "id": 55161,
                                              "name": "tokenAmount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 55112,
                                              "src": "26682:11:49",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                                "typeString": "struct Client.EVMTokenAmount memory"
                                              }
                                            },
                                            "id": 55162,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "26694:5:49",
                                            "memberName": "token",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 49429,
                                            "src": "26682:17:49",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "expression": {
                                                  "id": 55157,
                                                  "name": "s_dynamicConfig",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 53983,
                                                  "src": "26628:15:49",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_DynamicConfig_$53902_storage",
                                                    "typeString": "struct EVM2EVMOnRamp.DynamicConfig storage ref"
                                                  }
                                                },
                                                "id": 55158,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "26644:13:49",
                                                "memberName": "priceRegistry",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 53897,
                                                "src": "26628:29:49",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 55156,
                                              "name": "IPriceRegistry",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 49288,
                                              "src": "26613:14:49",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_IPriceRegistry_$49288_$",
                                                "typeString": "type(contract IPriceRegistry)"
                                              }
                                            },
                                            "id": 55159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "26613:45:49",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IPriceRegistry_$49288",
                                              "typeString": "contract IPriceRegistry"
                                            }
                                          },
                                          "id": 55160,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "26659:22:49",
                                          "memberName": "getValidatedTokenPrice",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 49243,
                                          "src": "26613:68:49",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint192_$",
                                            "typeString": "function (address) view external returns (uint192)"
                                          }
                                        },
                                        "id": 55163,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26613:87:49",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint192",
                                          "typeString": "uint192"
                                        }
                                      },
                                      "src": "26600:100:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      }
                                    },
                                    "id": 55165,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26600:100:49"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 55185,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 55173,
                                  "name": "bpsFeeUSD",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55140,
                                  "src": "26897:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 55184,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 55181,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "arguments": [
                                            {
                                              "expression": {
                                                "id": 55176,
                                                "name": "tokenAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 55112,
                                                "src": "26950:11:49",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_memory_ptr",
                                                  "typeString": "struct Client.EVMTokenAmount memory"
                                                }
                                              },
                                              "id": 55177,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "26962:6:49",
                                              "memberName": "amount",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 49431,
                                              "src": "26950:18:49",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "id": 55174,
                                              "name": "tokenPrice",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 55148,
                                              "src": "26910:10:49",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint192",
                                                "typeString": "uint192"
                                              }
                                            },
                                            "id": 55175,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "26921:28:49",
                                            "memberName": "_calcUSDValueFromTokenAmount",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 50337,
                                            "src": "26910:39:49",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint192_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint192_$",
                                              "typeString": "function (uint192,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 55178,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "26910:59:49",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 55179,
                                            "name": "transferFeeConfig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 55119,
                                            "src": "26972:17:49",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig memory"
                                            }
                                          },
                                          "id": 55180,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "26990:5:49",
                                          "memberName": "ratio",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 53932,
                                          "src": "26972:23:49",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          }
                                        },
                                        "src": "26910:85:49",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 55182,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26909:87:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "hexValue": "316535",
                                    "id": 55183,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26999:3:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_100000_by_1",
                                      "typeString": "int_const 100000"
                                    },
                                    "value": "1e5"
                                  },
                                  "src": "26909:93:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26897:105:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 55186,
                              "nodeType": "ExpressionStatement",
                              "src": "26897:105:49"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 55191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 55189,
                            "name": "tokenTransferFeeUSD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55089,
                            "src": "27019:19:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 55190,
                            "name": "bpsFeeUSD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55140,
                            "src": "27042:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27019:32:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 55192,
                        "nodeType": "ExpressionStatement",
                        "src": "27019:32:49"
                      },
                      {
                        "expression": {
                          "id": 55196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 55193,
                            "name": "tokenTransferGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55091,
                            "src": "27059:16:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 55194,
                              "name": "transferFeeConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55119,
                              "src": "27079:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig memory"
                              }
                            },
                            "id": 55195,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "27097:15:49",
                            "memberName": "destGasOverhead",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53934,
                            "src": "27079:33:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "27059:53:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 55197,
                        "nodeType": "ExpressionStatement",
                        "src": "27059:53:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55102,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55099,
                      "src": "25857:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55103,
                      "name": "numberOfTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55094,
                      "src": "25861:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25857:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55199,
                  "initializationExpression": {
                    "assignments": [
                      55099
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55099,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "25850:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55199,
                        "src": "25842:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25842:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55101,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25854:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25842:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55106,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "25877:3:49",
                      "subExpression": {
                        "id": 55105,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55099,
                        "src": "25879:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55107,
                    "nodeType": "ExpressionStatement",
                    "src": "25877:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "25837:1282:49"
                },
                {
                  "assignments": [
                    55201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55201,
                      "mutability": "mutable",
                      "name": "minTransferFeeUSD",
                      "nameLocation": "27295:17:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55242,
                      "src": "27287:25:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55200,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27287:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55209,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 55204,
                            "name": "feeTokenConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55086,
                            "src": "27323:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                            }
                          },
                          "id": 55205,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "27338:22:49",
                          "memberName": "minTokenTransferFeeUSD",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53906,
                          "src": "27323:37:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        ],
                        "id": 55203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27315:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 55202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27315:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 55206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27315:46:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "31653136",
                      "id": 55207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27364:4:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                        "typeString": "int_const 10000000000000000"
                      },
                      "value": "1e16"
                    },
                    "src": "27315:53:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27287:81:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55210,
                      "name": "tokenTransferFeeUSD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55089,
                      "src": "27378:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55211,
                      "name": "minTransferFeeUSD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55201,
                      "src": "27400:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27378:39:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55218,
                  "nodeType": "IfStatement",
                  "src": "27374:104:49",
                  "trueBody": {
                    "id": 55217,
                    "nodeType": "Block",
                    "src": "27419:59:49",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 55213,
                              "name": "minTransferFeeUSD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55201,
                              "src": "27435:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 55214,
                              "name": "tokenTransferGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55091,
                              "src": "27454:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "id": 55215,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "27434:37:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$",
                            "typeString": "tuple(uint256,uint32)"
                          }
                        },
                        "functionReturnParameters": 55092,
                        "id": 55216,
                        "nodeType": "Return",
                        "src": "27427:44:49"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    55220
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55220,
                      "mutability": "mutable",
                      "name": "maxTransferFeeUSD",
                      "nameLocation": "27492:17:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55242,
                      "src": "27484:25:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55219,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27484:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55228,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 55223,
                            "name": "feeTokenConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55086,
                            "src": "27520:14:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                            }
                          },
                          "id": 55224,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "27535:22:49",
                          "memberName": "maxTokenTransferFeeUSD",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53908,
                          "src": "27520:37:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        ],
                        "id": 55222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27512:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 55221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27512:7:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 55225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27512:46:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "31653136",
                      "id": 55226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27561:4:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                        "typeString": "int_const 10000000000000000"
                      },
                      "value": "1e16"
                    },
                    "src": "27512:53:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27484:81:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55229,
                      "name": "tokenTransferFeeUSD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55089,
                      "src": "27575:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 55230,
                      "name": "maxTransferFeeUSD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55220,
                      "src": "27597:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27575:39:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55237,
                  "nodeType": "IfStatement",
                  "src": "27571:104:49",
                  "trueBody": {
                    "id": 55236,
                    "nodeType": "Block",
                    "src": "27616:59:49",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 55232,
                              "name": "maxTransferFeeUSD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55220,
                              "src": "27632:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 55233,
                              "name": "tokenTransferGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55091,
                              "src": "27651:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "id": 55234,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "27631:37:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$",
                            "typeString": "tuple(uint256,uint32)"
                          }
                        },
                        "functionReturnParameters": 55092,
                        "id": 55235,
                        "nodeType": "Return",
                        "src": "27624:44:49"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 55238,
                        "name": "tokenTransferFeeUSD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55089,
                        "src": "27689:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 55239,
                        "name": "tokenTransferGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55091,
                        "src": "27710:16:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "id": 55240,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "27688:39:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$",
                      "typeString": "tuple(uint256,uint32)"
                    }
                  },
                  "functionReturnParameters": 55092,
                  "id": 55241,
                  "nodeType": "Return",
                  "src": "27681:46:49"
                }
              ]
            },
            "documentation": {
              "id": 55075,
              "nodeType": "StructuredDocumentation",
              "src": "25032:491:49",
              "text": "@notice Returns the token transfer fee.\n A basis point fee is calculated from the USD value of each token transfer.\n Sum of basis point fees is confined within range [minTokenTransferFeeUSD, maxTokenTransferFeeUSD].\n @dev Assumes that tokenAmounts are validated to be listed tokens elsewhere.\n @dev Splitting one token transfer into multiple transfers is discouraged,\n as it will result in a transferFee equal or greater than the same amount aggregated/de-duped."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getTokenTransferCost",
            "nameLocation": "25535:21:49",
            "parameters": {
              "id": 55087,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55077,
                  "mutability": "mutable",
                  "name": "feeToken",
                  "nameLocation": "25570:8:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25562:16:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25562:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55079,
                  "mutability": "mutable",
                  "name": "feeTokenPrice",
                  "nameLocation": "25592:13:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25584:21:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint192",
                    "typeString": "uint192"
                  },
                  "typeName": {
                    "id": 55078,
                    "name": "uint192",
                    "nodeType": "ElementaryTypeName",
                    "src": "25584:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint192",
                      "typeString": "uint192"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55083,
                  "mutability": "mutable",
                  "name": "tokenAmounts",
                  "nameLocation": "25644:12:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25611:45:49",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct Client.EVMTokenAmount[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55081,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55080,
                        "name": "Client.EVMTokenAmount",
                        "nameLocations": [
                          "25611:6:49",
                          "25618:14:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 49432,
                        "src": "25611:21:49"
                      },
                      "referencedDeclaration": 49432,
                      "src": "25611:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_EVMTokenAmount_$49432_storage_ptr",
                        "typeString": "struct Client.EVMTokenAmount"
                      }
                    },
                    "id": 55082,
                    "nodeType": "ArrayTypeName",
                    "src": "25611:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_EVMTokenAmount_$49432_storage_$dyn_storage_ptr",
                      "typeString": "struct Client.EVMTokenAmount[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55086,
                  "mutability": "mutable",
                  "name": "feeTokenConfig",
                  "nameLocation": "25684:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25662:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                  },
                  "typeName": {
                    "id": 55085,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 55084,
                      "name": "FeeTokenConfig",
                      "nameLocations": [
                        "25662:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53915,
                      "src": "25662:14:49"
                    },
                    "referencedDeclaration": 53915,
                    "src": "25662:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25556:146:49"
            },
            "returnParameters": {
              "id": 55092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55089,
                  "mutability": "mutable",
                  "name": "tokenTransferFeeUSD",
                  "nameLocation": "25734:19:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25726:27:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 55088,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25726:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55091,
                  "mutability": "mutable",
                  "name": "tokenTransferGas",
                  "nameLocation": "25762:16:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55243,
                  "src": "25755:23:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 55090,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "25755:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25725:54:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55257,
            "nodeType": "FunctionDefinition",
            "src": "27902:144:49",
            "nodes": [],
            "body": {
              "id": 55256,
              "nodeType": "Block",
              "src": "28005:41:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 55252,
                      "name": "s_feeTokenConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54001,
                      "src": "28018:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_FeeTokenConfig_$53915_storage_$",
                        "typeString": "mapping(address => struct EVM2EVMOnRamp.FeeTokenConfig storage ref)"
                      }
                    },
                    "id": 55254,
                    "indexExpression": {
                      "id": 55253,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55246,
                      "src": "28035:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28018:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig storage ref"
                    }
                  },
                  "functionReturnParameters": 55251,
                  "id": 55255,
                  "nodeType": "Return",
                  "src": "28011:30:49"
                }
              ]
            },
            "documentation": {
              "id": 55244,
              "nodeType": "StructuredDocumentation",
              "src": "27736:163:49",
              "text": "@notice Gets the fee configuration for a token\n @param token The token to get the fee configuration for\n @return feeTokenConfig FeeTokenConfig struct"
            },
            "functionSelector": "9a113c36",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFeeTokenConfig",
            "nameLocation": "27911:17:49",
            "parameters": {
              "id": 55247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55246,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "27937:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55257,
                  "src": "27929:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27929:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27928:15:49"
            },
            "returnParameters": {
              "id": 55251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55250,
                  "mutability": "mutable",
                  "name": "feeTokenConfig",
                  "nameLocation": "27989:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55257,
                  "src": "27967:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                  },
                  "typeName": {
                    "id": 55249,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 55248,
                      "name": "FeeTokenConfig",
                      "nameLocations": [
                        "27967:14:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53915,
                      "src": "27967:14:49"
                    },
                    "referencedDeclaration": 53915,
                    "src": "27967:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27966:38:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55272,
            "nodeType": "FunctionDefinition",
            "src": "28172:150:49",
            "nodes": [],
            "body": {
              "id": 55271,
              "nodeType": "Block",
              "src": "28273:49:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 55268,
                        "name": "feeTokenConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55262,
                        "src": "28298:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      ],
                      "id": 55267,
                      "name": "_setFeeTokenConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55325,
                      "src": "28279:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory)"
                      }
                    },
                    "id": 55269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28279:38:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55270,
                  "nodeType": "ExpressionStatement",
                  "src": "28279:38:49"
                }
              ]
            },
            "documentation": {
              "id": 55258,
              "nodeType": "StructuredDocumentation",
              "src": "28050:119:49",
              "text": "@notice Sets the fee configuration for a token\n @param feeTokenConfigArgs Array of FeeTokenConfigArgs structs."
            },
            "functionSelector": "352e4bc8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55265,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55264,
                  "name": "onlyOwnerOrAdmin",
                  "nameLocations": [
                    "28256:16:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55984,
                  "src": "28256:16:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "28256:16:49"
              }
            ],
            "name": "setFeeTokenConfig",
            "nameLocation": "28181:17:49",
            "parameters": {
              "id": 55263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55262,
                  "mutability": "mutable",
                  "name": "feeTokenConfigArgs",
                  "nameLocation": "28227:18:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55272,
                  "src": "28199:46:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55260,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55259,
                        "name": "FeeTokenConfigArgs",
                        "nameLocations": [
                          "28199:18:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53930,
                        "src": "28199:18:49"
                      },
                      "referencedDeclaration": 53930,
                      "src": "28199:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                      }
                    },
                    "id": 55261,
                    "nodeType": "ArrayTypeName",
                    "src": "28199:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28198:48:49"
            },
            "returnParameters": {
              "id": 55266,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28273:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55325,
            "nodeType": "FunctionDefinition",
            "src": "28411:657:49",
            "nodes": [],
            "body": {
              "id": 55324,
              "nodeType": "Block",
              "src": "28496:572:49",
              "nodes": [],
              "statements": [
                {
                  "body": {
                    "id": 55318,
                    "nodeType": "Block",
                    "src": "28558:463:49",
                    "statements": [
                      {
                        "assignments": [
                          55293
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55293,
                            "mutability": "mutable",
                            "name": "configArg",
                            "nameLocation": "28592:9:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55318,
                            "src": "28566:35:49",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                            },
                            "typeName": {
                              "id": 55292,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 55291,
                                "name": "FeeTokenConfigArgs",
                                "nameLocations": [
                                  "28566:18:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 53930,
                                "src": "28566:18:49"
                              },
                              "referencedDeclaration": 53930,
                              "src": "28566:18:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_storage_ptr",
                                "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55297,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55294,
                            "name": "feeTokenConfigArgs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55277,
                            "src": "28604:18:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                            }
                          },
                          "id": 55296,
                          "indexExpression": {
                            "id": 55295,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55281,
                            "src": "28623:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "28604:21:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                            "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28566:59:49"
                      },
                      {
                        "expression": {
                          "id": 55316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 55298,
                              "name": "s_feeTokenConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54001,
                              "src": "28634:16:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_FeeTokenConfig_$53915_storage_$",
                                "typeString": "mapping(address => struct EVM2EVMOnRamp.FeeTokenConfig storage ref)"
                              }
                            },
                            "id": 55301,
                            "indexExpression": {
                              "expression": {
                                "id": 55299,
                                "name": "configArg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55293,
                                "src": "28651:9:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                }
                              },
                              "id": 55300,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "28661:5:49",
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53917,
                              "src": "28651:15:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "28634:33:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 55303,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28710:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55304,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28720:13:49",
                                "memberName": "networkFeeUSD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53919,
                                "src": "28710:23:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55305,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28767:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55306,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28777:22:49",
                                "memberName": "minTokenTransferFeeUSD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53921,
                                "src": "28767:32:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55307,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28833:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55308,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28843:22:49",
                                "memberName": "maxTokenTransferFeeUSD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53923,
                                "src": "28833:32:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55309,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28890:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55310,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28900:13:49",
                                "memberName": "gasMultiplier",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53925,
                                "src": "28890:23:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55311,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28942:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55312,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28952:17:49",
                                "memberName": "premiumMultiplier",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53927,
                                "src": "28942:27:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55313,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55293,
                                  "src": "28988:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory"
                                  }
                                },
                                "id": 55314,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28998:7:49",
                                "memberName": "enabled",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53929,
                                "src": "28988:17:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 55302,
                              "name": "FeeTokenConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53915,
                              "src": "28670:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_FeeTokenConfig_$53915_storage_ptr_$",
                                "typeString": "type(struct EVM2EVMOnRamp.FeeTokenConfig storage pointer)"
                              }
                            },
                            "id": 55315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "28695:13:49",
                              "28743:22:49",
                              "28809:22:49",
                              "28875:13:49",
                              "28923:17:49",
                              "28979:7:49"
                            ],
                            "names": [
                              "networkFeeUSD",
                              "minTokenTransferFeeUSD",
                              "maxTokenTransferFeeUSD",
                              "gasMultiplier",
                              "premiumMultiplier",
                              "enabled"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "28670:344:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig memory"
                            }
                          },
                          "src": "28634:380:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_FeeTokenConfig_$53915_storage",
                            "typeString": "struct EVM2EVMOnRamp.FeeTokenConfig storage ref"
                          }
                        },
                        "id": 55317,
                        "nodeType": "ExpressionStatement",
                        "src": "28634:380:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55284,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55281,
                      "src": "28522:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55285,
                        "name": "feeTokenConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55277,
                        "src": "28526:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      },
                      "id": 55286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "28545:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "28526:25:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28522:29:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55319,
                  "initializationExpression": {
                    "assignments": [
                      55281
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55281,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "28515:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55319,
                        "src": "28507:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28507:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55283,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28519:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28507:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "28553:3:49",
                      "subExpression": {
                        "id": 55288,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55281,
                        "src": "28555:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55290,
                    "nodeType": "ExpressionStatement",
                    "src": "28553:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "28502:519:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 55321,
                        "name": "feeTokenConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55277,
                        "src": "29044:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory"
                        }
                      ],
                      "id": 55320,
                      "name": "FeeConfigSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53841,
                      "src": "29031:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.FeeTokenConfigArgs memory[] memory)"
                      }
                    },
                    "id": 55322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29031:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55323,
                  "nodeType": "EmitStatement",
                  "src": "29026:37:49"
                }
              ]
            },
            "documentation": {
              "id": 55273,
              "nodeType": "StructuredDocumentation",
              "src": "28326:82:49",
              "text": "@dev Set the fee config\n @param feeTokenConfigArgs The fee token configs."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setFeeTokenConfig",
            "nameLocation": "28420:18:49",
            "parameters": {
              "id": 55278,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55277,
                  "mutability": "mutable",
                  "name": "feeTokenConfigArgs",
                  "nameLocation": "28467:18:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55325,
                  "src": "28439:46:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55275,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55274,
                        "name": "FeeTokenConfigArgs",
                        "nameLocations": [
                          "28439:18:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53930,
                        "src": "28439:18:49"
                      },
                      "referencedDeclaration": 53930,
                      "src": "28439:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_FeeTokenConfigArgs_$53930_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs"
                      }
                    },
                    "id": 55276,
                    "nodeType": "ArrayTypeName",
                    "src": "28439:20:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_FeeTokenConfigArgs_$53930_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.FeeTokenConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28438:48:49"
            },
            "returnParameters": {
              "id": 55279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28496:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55339,
            "nodeType": "FunctionDefinition",
            "src": "29134:184:49",
            "nodes": [],
            "body": {
              "id": 55338,
              "nodeType": "Block",
              "src": "29269:49:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 55334,
                      "name": "s_tokenTransferFeeConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54007,
                      "src": "29282:24:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenTransferFeeConfig_$53935_storage_$",
                        "typeString": "mapping(address => struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref)"
                      }
                    },
                    "id": 55336,
                    "indexExpression": {
                      "id": 55335,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55328,
                      "src": "29307:5:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29282:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref"
                    }
                  },
                  "functionReturnParameters": 55333,
                  "id": 55337,
                  "nodeType": "Return",
                  "src": "29275:38:49"
                }
              ]
            },
            "documentation": {
              "id": 55326,
              "nodeType": "StructuredDocumentation",
              "src": "29072:59:49",
              "text": "@notice Gets the transfer fee config for a given token."
            },
            "functionSelector": "1772047e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenTransferFeeConfig",
            "nameLocation": "29143:25:49",
            "parameters": {
              "id": 55329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55328,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "29182:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55339,
                  "src": "29174:13:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55327,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29174:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29168:23:49"
            },
            "returnParameters": {
              "id": 55333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55332,
                  "mutability": "mutable",
                  "name": "tokenTransferFeeConfig",
                  "nameLocation": "29245:22:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55339,
                  "src": "29215:52:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig"
                  },
                  "typeName": {
                    "id": 55331,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 55330,
                      "name": "TokenTransferFeeConfig",
                      "nameLocations": [
                        "29215:22:49"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53935,
                      "src": "29215:22:49"
                    },
                    "referencedDeclaration": 53935,
                    "src": "29215:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29214:54:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55354,
            "nodeType": "FunctionDefinition",
            "src": "29414:198:49",
            "nodes": [],
            "body": {
              "id": 55353,
              "nodeType": "Block",
              "src": "29547:65:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 55350,
                        "name": "tokenTransferFeeConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55344,
                        "src": "29580:26:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      ],
                      "id": 55349,
                      "name": "_setTokenTransferFeeConfig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55399,
                      "src": "29553:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory)"
                      }
                    },
                    "id": 55351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29553:54:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55352,
                  "nodeType": "ExpressionStatement",
                  "src": "29553:54:49"
                }
              ]
            },
            "documentation": {
              "id": 55340,
              "nodeType": "StructuredDocumentation",
              "src": "29322:89:49",
              "text": "@notice Sets the transfer fee config.\n @dev only callable by the owner or admin."
            },
            "functionSelector": "e76c0b06",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55347,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55346,
                  "name": "onlyOwnerOrAdmin",
                  "nameLocations": [
                    "29530:16:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55984,
                  "src": "29530:16:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "29530:16:49"
              }
            ],
            "name": "setTokenTransferFeeConfig",
            "nameLocation": "29423:25:49",
            "parameters": {
              "id": 55345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55344,
                  "mutability": "mutable",
                  "name": "tokenTransferFeeConfigArgs",
                  "nameLocation": "29490:26:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55354,
                  "src": "29454:62:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55342,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55341,
                        "name": "TokenTransferFeeConfigArgs",
                        "nameLocations": [
                          "29454:26:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53942,
                        "src": "29454:26:49"
                      },
                      "referencedDeclaration": 53942,
                      "src": "29454:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                      }
                    },
                    "id": 55343,
                    "nodeType": "ArrayTypeName",
                    "src": "29454:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29448:72:49"
            },
            "returnParameters": {
              "id": 55348,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29547:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55399,
            "nodeType": "FunctionDefinition",
            "src": "29684:506:49",
            "nodes": [],
            "body": {
              "id": 55398,
              "nodeType": "Block",
              "src": "29793:397:49",
              "nodes": [],
              "statements": [
                {
                  "body": {
                    "id": 55392,
                    "nodeType": "Block",
                    "src": "29863:259:49",
                    "statements": [
                      {
                        "assignments": [
                          55375
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55375,
                            "mutability": "mutable",
                            "name": "configArg",
                            "nameLocation": "29905:9:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55392,
                            "src": "29871:43:49",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                            },
                            "typeName": {
                              "id": 55374,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 55373,
                                "name": "TokenTransferFeeConfigArgs",
                                "nameLocations": [
                                  "29871:26:49"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 53942,
                                "src": "29871:26:49"
                              },
                              "referencedDeclaration": 53942,
                              "src": "29871:26:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_storage_ptr",
                                "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55379,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55376,
                            "name": "tokenTransferFeeConfigArgs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55359,
                            "src": "29917:26:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                            }
                          },
                          "id": 55378,
                          "indexExpression": {
                            "id": 55377,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55363,
                            "src": "29944:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29917:29:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr",
                            "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29871:75:49"
                      },
                      {
                        "expression": {
                          "id": 55390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 55380,
                              "name": "s_tokenTransferFeeConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54007,
                              "src": "29955:24:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenTransferFeeConfig_$53935_storage_$",
                                "typeString": "mapping(address => struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref)"
                              }
                            },
                            "id": 55383,
                            "indexExpression": {
                              "expression": {
                                "id": 55381,
                                "name": "configArg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55375,
                                "src": "29980:9:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr",
                                  "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory"
                                }
                              },
                              "id": 55382,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "29990:5:49",
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53937,
                              "src": "29980:15:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "29955:41:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage",
                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 55385,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55375,
                                  "src": "30039:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory"
                                  }
                                },
                                "id": 55386,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "30049:5:49",
                                "memberName": "ratio",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53939,
                                "src": "30039:15:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "expression": {
                                  "id": 55387,
                                  "name": "configArg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55375,
                                  "src": "30081:9:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr",
                                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory"
                                  }
                                },
                                "id": 55388,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "30091:15:49",
                                "memberName": "destGasOverhead",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 53941,
                                "src": "30081:25:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 55384,
                              "name": "TokenTransferFeeConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53935,
                              "src": "29999:22:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TokenTransferFeeConfig_$53935_storage_ptr_$",
                                "typeString": "type(struct EVM2EVMOnRamp.TokenTransferFeeConfig storage pointer)"
                              }
                            },
                            "id": 55389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "30032:5:49",
                              "30064:15:49"
                            ],
                            "names": [
                              "ratio",
                              "destGasOverhead"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "29999:116:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig memory"
                            }
                          },
                          "src": "29955:160:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenTransferFeeConfig_$53935_storage",
                            "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfig storage ref"
                          }
                        },
                        "id": 55391,
                        "nodeType": "ExpressionStatement",
                        "src": "29955:160:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55366,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55363,
                      "src": "29819:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55367,
                        "name": "tokenTransferFeeConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55359,
                        "src": "29823:26:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      },
                      "id": 55368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "29850:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "29823:33:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29819:37:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55393,
                  "initializationExpression": {
                    "assignments": [
                      55363
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55363,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "29812:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55393,
                        "src": "29804:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55362,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29804:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55365,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29816:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "29804:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55371,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "29858:3:49",
                      "subExpression": {
                        "id": 55370,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55363,
                        "src": "29860:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55372,
                    "nodeType": "ExpressionStatement",
                    "src": "29858:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "29799:323:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 55395,
                        "name": "tokenTransferFeeConfigArgs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55359,
                        "src": "30158:26:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory"
                        }
                      ],
                      "id": 55394,
                      "name": "TokenTransferFeeConfigSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53847,
                      "src": "30132:25:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs memory[] memory)"
                      }
                    },
                    "id": 55396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30132:53:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55397,
                  "nodeType": "EmitStatement",
                  "src": "30127:58:49"
                }
              ]
            },
            "documentation": {
              "id": 55355,
              "nodeType": "StructuredDocumentation",
              "src": "29616:65:49",
              "text": "@notice internal helper to set the token transfer fee config."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenTransferFeeConfig",
            "nameLocation": "29693:26:49",
            "parameters": {
              "id": 55360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55359,
                  "mutability": "mutable",
                  "name": "tokenTransferFeeConfigArgs",
                  "nameLocation": "29756:26:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55399,
                  "src": "29720:62:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55357,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55356,
                        "name": "TokenTransferFeeConfigArgs",
                        "nameLocations": [
                          "29720:26:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53942,
                        "src": "29720:26:49"
                      },
                      "referencedDeclaration": 53942,
                      "src": "29720:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenTransferFeeConfigArgs_$53942_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs"
                      }
                    },
                    "id": 55358,
                    "nodeType": "ArrayTypeName",
                    "src": "29720:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_TokenTransferFeeConfigArgs_$53942_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.TokenTransferFeeConfigArgs[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29719:64:49"
            },
            "returnParameters": {
              "id": 55361,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29793:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55408,
            "nodeType": "FunctionDefinition",
            "src": "30508:90:49",
            "nodes": [],
            "body": {
              "id": 55407,
              "nodeType": "Block",
              "src": "30566:32:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 55405,
                    "name": "s_nopFeesJuels",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54015,
                    "src": "30579:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "functionReturnParameters": 55404,
                  "id": 55406,
                  "nodeType": "Return",
                  "src": "30572:21:49"
                }
              ]
            },
            "documentation": {
              "id": 55400,
              "nodeType": "StructuredDocumentation",
              "src": "30405:100:49",
              "text": "@notice Get the total amount of fees to be paid to the Nops (in LINK)\n @return totalNopFees"
            },
            "functionSelector": "54b71468",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNopFeesJuels",
            "nameLocation": "30517:15:49",
            "parameters": {
              "id": 55401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30532:2:49"
            },
            "returnParameters": {
              "id": 55404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55403,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55408,
                  "src": "30558:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 55402,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "30558:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30557:8:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55475,
            "nodeType": "FunctionDefinition",
            "src": "30761:472:49",
            "nodes": [],
            "body": {
              "id": 55474,
              "nodeType": "Block",
              "src": "30863:370:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55419
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55419,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "30877:6:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55474,
                      "src": "30869:14:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55418,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30869:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55423,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 55420,
                        "name": "s_nops",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53987,
                        "src": "30886:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                          "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                        }
                      },
                      "id": 55421,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30893:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 105076,
                      "src": "30886:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 55422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30886:15:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30869:32:49"
                },
                {
                  "expression": {
                    "id": 55431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55424,
                      "name": "nopsAndWeights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55414,
                      "src": "30907:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 55429,
                          "name": "length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55419,
                          "src": "30943:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 55428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "30924:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (struct EVM2EVMOnRamp.NopAndWeight memory[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 55426,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 55425,
                              "name": "NopAndWeight",
                              "nameLocations": [
                                "30928:12:49"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 53947,
                              "src": "30928:12:49"
                            },
                            "referencedDeclaration": 53947,
                            "src": "30928:12:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                              "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                            }
                          },
                          "id": 55427,
                          "nodeType": "ArrayTypeName",
                          "src": "30928:14:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                            "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                          }
                        }
                      },
                      "id": 55430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30924:26:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                      }
                    },
                    "src": "30907:43:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                    }
                  },
                  "id": 55432,
                  "nodeType": "ExpressionStatement",
                  "src": "30907:43:49"
                },
                {
                  "body": {
                    "id": 55464,
                    "nodeType": "Block",
                    "src": "30993:155:49",
                    "statements": [
                      {
                        "assignments": [
                          55444,
                          55446
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55444,
                            "mutability": "mutable",
                            "name": "nopAddress",
                            "nameLocation": "31010:10:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55464,
                            "src": "31002:18:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55443,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "31002:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 55446,
                            "mutability": "mutable",
                            "name": "nopWeight",
                            "nameLocation": "31030:9:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55464,
                            "src": "31022:17:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 55445,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "31022:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55451,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 55449,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55434,
                              "src": "31053:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 55447,
                              "name": "s_nops",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53987,
                              "src": "31043:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                                "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                              }
                            },
                            "id": 55448,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "31050:2:49",
                            "memberName": "at",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105116,
                            "src": "31043:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                              "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"
                            }
                          },
                          "id": 55450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31043:12:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                            "typeString": "tuple(address,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31001:54:49"
                      },
                      {
                        "expression": {
                          "id": 55462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 55452,
                              "name": "nopsAndWeights",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55414,
                              "src": "31063:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                              }
                            },
                            "id": 55454,
                            "indexExpression": {
                              "id": 55453,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55434,
                              "src": "31078:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "31063:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NopAndWeight_$53947_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 55456,
                                "name": "nopAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55444,
                                "src": "31102:10:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 55459,
                                    "name": "nopWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 55446,
                                    "src": "31129:9:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 55458,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "31122:6:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  },
                                  "typeName": {
                                    "id": 55457,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "31122:6:49",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 55460,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31122:17:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "id": 55455,
                              "name": "NopAndWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53947,
                              "src": "31083:12:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_NopAndWeight_$53947_storage_ptr_$",
                                "typeString": "type(struct EVM2EVMOnRamp.NopAndWeight storage pointer)"
                              }
                            },
                            "id": 55461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "31097:3:49",
                              "31114:6:49"
                            ],
                            "names": [
                              "nop",
                              "weight"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "31083:58:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NopAndWeight_$53947_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory"
                            }
                          },
                          "src": "31063:78:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NopAndWeight_$53947_memory_ptr",
                            "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory"
                          }
                        },
                        "id": 55463,
                        "nodeType": "ExpressionStatement",
                        "src": "31063:78:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55437,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55434,
                      "src": "30976:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55438,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55419,
                      "src": "30980:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "30976:10:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55465,
                  "initializationExpression": {
                    "assignments": [
                      55434
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55434,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "30969:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55465,
                        "src": "30961:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55433,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30961:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55436,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30973:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "30961:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "30988:3:49",
                      "subExpression": {
                        "id": 55440,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55434,
                        "src": "30990:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55442,
                    "nodeType": "ExpressionStatement",
                    "src": "30988:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "30956:192:49"
                },
                {
                  "expression": {
                    "id": 55468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55466,
                      "name": "weightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55416,
                      "src": "31153:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 55467,
                      "name": "s_nopWeightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54018,
                      "src": "31168:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "31153:32:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 55469,
                  "nodeType": "ExpressionStatement",
                  "src": "31153:32:49"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 55470,
                        "name": "nopsAndWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55414,
                        "src": "31199:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                        }
                      },
                      {
                        "id": 55471,
                        "name": "weightsTotal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55416,
                        "src": "31215:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 55472,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "31198:30:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr_$_t_uint256_$",
                      "typeString": "tuple(struct EVM2EVMOnRamp.NopAndWeight memory[] memory,uint256)"
                    }
                  },
                  "functionReturnParameters": 55417,
                  "id": 55473,
                  "nodeType": "Return",
                  "src": "31191:37:49"
                }
              ]
            },
            "documentation": {
              "id": 55409,
              "nodeType": "StructuredDocumentation",
              "src": "30602:156:49",
              "text": "@notice Gets the Nops and their weights\n @return nopsAndWeights Array of NopAndWeight structs\n @return weightsTotal The sum weight of all Nops"
            },
            "functionSelector": "b06d41bc",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNops",
            "nameLocation": "30770:7:49",
            "parameters": {
              "id": 55410,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30777:2:49"
            },
            "returnParameters": {
              "id": 55417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55414,
                  "mutability": "mutable",
                  "name": "nopsAndWeights",
                  "nameLocation": "30825:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55475,
                  "src": "30803:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55412,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55411,
                        "name": "NopAndWeight",
                        "nameLocations": [
                          "30803:12:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53947,
                        "src": "30803:12:49"
                      },
                      "referencedDeclaration": 53947,
                      "src": "30803:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                      }
                    },
                    "id": 55413,
                    "nodeType": "ArrayTypeName",
                    "src": "30803:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55416,
                  "mutability": "mutable",
                  "name": "weightsTotal",
                  "nameLocation": "30849:12:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55475,
                  "src": "30841:20:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 55415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30841:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30802:60:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55490,
            "nodeType": "FunctionDefinition",
            "src": "31341:118:49",
            "nodes": [],
            "body": {
              "id": 55489,
              "nodeType": "Block",
              "src": "31424:35:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 55486,
                        "name": "nopsAndWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55480,
                        "src": "31439:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight calldata[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight calldata[] calldata"
                        }
                      ],
                      "id": 55485,
                      "name": "_setNops",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55617,
                      "src": "31430:8:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct EVM2EVMOnRamp.NopAndWeight memory[] memory)"
                      }
                    },
                    "id": 55487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31430:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55488,
                  "nodeType": "ExpressionStatement",
                  "src": "31430:24:49"
                }
              ]
            },
            "documentation": {
              "id": 55476,
              "nodeType": "StructuredDocumentation",
              "src": "31237:101:49",
              "text": "@notice Sets the Nops and their weights\n @param nopsAndWeights Array of NopAndWeight structs"
            },
            "functionSelector": "76f6ae76",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55483,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55482,
                  "name": "onlyOwnerOrAdmin",
                  "nameLocations": [
                    "31407:16:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55984,
                  "src": "31407:16:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "31407:16:49"
              }
            ],
            "name": "setNops",
            "nameLocation": "31350:7:49",
            "parameters": {
              "id": 55481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55480,
                  "mutability": "mutable",
                  "name": "nopsAndWeights",
                  "nameLocation": "31382:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55490,
                  "src": "31358:38:49",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55478,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55477,
                        "name": "NopAndWeight",
                        "nameLocations": [
                          "31358:12:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53947,
                        "src": "31358:12:49"
                      },
                      "referencedDeclaration": 53947,
                      "src": "31358:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                      }
                    },
                    "id": 55479,
                    "nodeType": "ArrayTypeName",
                    "src": "31358:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31357:40:49"
            },
            "returnParameters": {
              "id": 55484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31424:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55617,
            "nodeType": "FunctionDefinition",
            "src": "31712:1526:49",
            "nodes": [],
            "body": {
              "id": 55616,
              "nodeType": "Block",
              "src": "31777:1461:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55499
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55499,
                      "mutability": "mutable",
                      "name": "numberOfNops",
                      "nameLocation": "31791:12:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55616,
                      "src": "31783:20:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55498,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31783:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55502,
                  "initialValue": {
                    "expression": {
                      "id": 55500,
                      "name": "nopsAndWeights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55495,
                      "src": "31806:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                      }
                    },
                    "id": 55501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "31821:6:49",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "31806:21:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31783:44:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55503,
                      "name": "numberOfNops",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55499,
                      "src": "31837:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 55504,
                      "name": "MAX_NUMBER_OF_NOPS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53979,
                      "src": "31852:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31837:33:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55509,
                  "nodeType": "IfStatement",
                  "src": "31833:59:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55506,
                        "name": "TooManyNops",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53756,
                        "src": "31879:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31879:13:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55508,
                    "nodeType": "RevertStatement",
                    "src": "31872:20:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 55516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 55512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 55510,
                        "name": "s_nopWeightsTotal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54018,
                        "src": "32085:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 55511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32105:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "32085:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "id": 55515,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 55513,
                        "name": "s_nopFeesJuels",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54015,
                        "src": "32110:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 55514,
                        "name": "s_nopWeightsTotal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54018,
                        "src": "32128:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "32110:35:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "32085:60:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55521,
                  "nodeType": "IfStatement",
                  "src": "32081:90:49",
                  "trueBody": {
                    "id": 55520,
                    "nodeType": "Block",
                    "src": "32147:24:49",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 55517,
                            "name": "payNops",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55718,
                            "src": "32155:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 55518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32155:9:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55519,
                        "nodeType": "ExpressionStatement",
                        "src": "32155:9:49"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 55549,
                    "nodeType": "Block",
                    "src": "32297:75:49",
                    "statements": [
                      {
                        "assignments": [
                          55535,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55535,
                            "mutability": "mutable",
                            "name": "nop",
                            "nameLocation": "32314:3:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55549,
                            "src": "32306:11:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55534,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "32306:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 55542,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 55540,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 55538,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55523,
                                "src": "32333:1:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 55539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "32337:1:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "32333:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 55536,
                              "name": "s_nops",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53987,
                              "src": "32323:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                                "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                              }
                            },
                            "id": 55537,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "32330:2:49",
                            "memberName": "at",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105116,
                            "src": "32323:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                              "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"
                            }
                          },
                          "id": 55541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32323:16:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                            "typeString": "tuple(address,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32305:34:49"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55546,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55535,
                              "src": "32361:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 55543,
                              "name": "s_nops",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53987,
                              "src": "32347:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                                "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                              }
                            },
                            "id": 55545,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "32354:6:49",
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105034,
                            "src": "32347:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                              "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 55547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32347:18:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55548,
                        "nodeType": "ExpressionStatement",
                        "src": "32347:18:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55528,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55523,
                      "src": "32285:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 55529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32289:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32285:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55550,
                  "initializationExpression": {
                    "assignments": [
                      55523
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55523,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "32264:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55550,
                        "src": "32256:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55522,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32256:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55527,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 55524,
                          "name": "s_nops",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53987,
                          "src": "32268:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                            "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                          }
                        },
                        "id": 55525,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "32275:6:49",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 105076,
                        "src": "32268:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                          "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 55526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32268:15:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "32256:27:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": true,
                      "src": "32292:3:49",
                      "subExpression": {
                        "id": 55531,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55523,
                        "src": "32294:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55533,
                    "nodeType": "ExpressionStatement",
                    "src": "32292:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "32251:121:49"
                },
                {
                  "assignments": [
                    55552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55552,
                      "mutability": "mutable",
                      "name": "nopWeightsTotal",
                      "nameLocation": "32400:15:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55616,
                      "src": "32393:22:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 55551,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "32393:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55554,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 55553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "32418:1:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32393:26:49"
                },
                {
                  "body": {
                    "id": 55605,
                    "nodeType": "Block",
                    "src": "32662:480:49",
                    "statements": [
                      {
                        "assignments": [
                          55566
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55566,
                            "mutability": "mutable",
                            "name": "nop",
                            "nameLocation": "32914:3:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55605,
                            "src": "32906:11:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55565,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "32906:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55571,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 55567,
                              "name": "nopsAndWeights",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55495,
                              "src": "32920:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                              }
                            },
                            "id": 55569,
                            "indexExpression": {
                              "id": 55568,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55556,
                              "src": "32935:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32920:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NopAndWeight_$53947_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory"
                            }
                          },
                          "id": 55570,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "32938:3:49",
                          "memberName": "nop",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53944,
                          "src": "32920:21:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32906:35:49"
                      },
                      {
                        "assignments": [
                          55573
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55573,
                            "mutability": "mutable",
                            "name": "weight",
                            "nameLocation": "32956:6:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55605,
                            "src": "32949:13:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 55572,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "32949:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55578,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 55574,
                              "name": "nopsAndWeights",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55495,
                              "src": "32965:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                              }
                            },
                            "id": 55576,
                            "indexExpression": {
                              "id": 55575,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55556,
                              "src": "32980:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "32965:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NopAndWeight_$53947_memory_ptr",
                              "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory"
                            }
                          },
                          "id": 55577,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "32983:6:49",
                          "memberName": "weight",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53946,
                          "src": "32965:24:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32949:40:49"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 55588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 55581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 55579,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55566,
                              "src": "33001:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 55580,
                              "name": "i_linkToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53963,
                              "src": "33008:11:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "33001:18:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 55587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 55582,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55566,
                              "src": "33023:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 55585,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "33038:1:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 55584,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "33030:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 55583,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "33030:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 55586,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33030:10:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "33023:17:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "33001:39:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55593,
                        "nodeType": "IfStatement",
                        "src": "32997:74:49",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 55590,
                                "name": "nop",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55566,
                                "src": "33067:3:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 55589,
                              "name": "InvalidNopAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53805,
                              "src": "33049:17:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 55591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33049:22:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 55592,
                          "nodeType": "RevertStatement",
                          "src": "33042:29:49"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55597,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55566,
                              "src": "33090:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 55598,
                              "name": "weight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55573,
                              "src": "33095:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "id": 55594,
                              "name": "s_nops",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53987,
                              "src": "33079:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                                "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                              }
                            },
                            "id": 55596,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "33086:3:49",
                            "memberName": "set",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105007,
                            "src": "33079:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                              "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,address,uint256) returns (bool)"
                            }
                          },
                          "id": 55599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33079:23:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55600,
                        "nodeType": "ExpressionStatement",
                        "src": "33079:23:49"
                      },
                      {
                        "expression": {
                          "id": 55603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 55601,
                            "name": "nopWeightsTotal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55552,
                            "src": "33110:15:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 55602,
                            "name": "weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55573,
                            "src": "33129:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "33110:25:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 55604,
                        "nodeType": "ExpressionStatement",
                        "src": "33110:25:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55559,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55556,
                      "src": "32639:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55560,
                      "name": "numberOfNops",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55499,
                      "src": "32643:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32639:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55606,
                  "initializationExpression": {
                    "assignments": [
                      55556
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55556,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "32632:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55606,
                        "src": "32624:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32624:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55558,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55557,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32636:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "32624:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "32657:3:49",
                      "subExpression": {
                        "id": 55562,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55556,
                        "src": "32659:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55564,
                    "nodeType": "ExpressionStatement",
                    "src": "32657:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "32619:523:49"
                },
                {
                  "expression": {
                    "id": 55609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55607,
                      "name": "s_nopWeightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54018,
                      "src": "33147:17:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 55608,
                      "name": "nopWeightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55552,
                      "src": "33167:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "33147:35:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 55610,
                  "nodeType": "ExpressionStatement",
                  "src": "33147:35:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 55612,
                        "name": "nopWeightsTotal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55552,
                        "src": "33201:15:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 55613,
                        "name": "nopsAndWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55495,
                        "src": "33218:14:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct EVM2EVMOnRamp.NopAndWeight memory[] memory"
                        }
                      ],
                      "id": 55611,
                      "name": "NopsSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53860,
                      "src": "33193:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,struct EVM2EVMOnRamp.NopAndWeight memory[] memory)"
                      }
                    },
                    "id": 55614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33193:40:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55615,
                  "nodeType": "EmitStatement",
                  "src": "33188:45:49"
                }
              ]
            },
            "documentation": {
              "id": 55491,
              "nodeType": "StructuredDocumentation",
              "src": "31463:246:49",
              "text": "@param nopsAndWeights New set of nops and weights\n @dev Clears existing nops, sets new nops and weights\n @dev We permit fees to accrue before nops are configured, in which case\n they will go to the first set of configured nops."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setNops",
            "nameLocation": "31721:8:49",
            "parameters": {
              "id": 55496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55495,
                  "mutability": "mutable",
                  "name": "nopsAndWeights",
                  "nameLocation": "31752:14:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55617,
                  "src": "31730:36:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55493,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55492,
                        "name": "NopAndWeight",
                        "nameLocations": [
                          "31730:12:49"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 53947,
                        "src": "31730:12:49"
                      },
                      "referencedDeclaration": 53947,
                      "src": "31730:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NopAndWeight_$53947_storage_ptr",
                        "typeString": "struct EVM2EVMOnRamp.NopAndWeight"
                      }
                    },
                    "id": 55494,
                    "nodeType": "ArrayTypeName",
                    "src": "31730:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_NopAndWeight_$53947_storage_$dyn_storage_ptr",
                      "typeString": "struct EVM2EVMOnRamp.NopAndWeight[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31729:38:49"
            },
            "returnParameters": {
              "id": 55497,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31777:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55718,
            "nodeType": "FunctionDefinition",
            "src": "33556:914:49",
            "nodes": [],
            "body": {
              "id": 55717,
              "nodeType": "Block",
              "src": "33604:866:49",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55624
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55624,
                      "mutability": "mutable",
                      "name": "weightsTotal",
                      "nameLocation": "33618:12:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55717,
                      "src": "33610:20:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55623,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33610:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55626,
                  "initialValue": {
                    "id": 55625,
                    "name": "s_nopWeightsTotal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54018,
                    "src": "33633:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33610:40:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55627,
                      "name": "weightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55624,
                      "src": "33660:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 55628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "33676:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "33660:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55633,
                  "nodeType": "IfStatement",
                  "src": "33656:43:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55630,
                        "name": "NoNopsToPay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53752,
                        "src": "33686:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55631,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33686:13:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55632,
                    "nodeType": "RevertStatement",
                    "src": "33679:20:49"
                  }
                },
                {
                  "assignments": [
                    55635
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55635,
                      "mutability": "mutable",
                      "name": "totalFeesToPay",
                      "nameLocation": "33713:14:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55717,
                      "src": "33706:21:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 55634,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "33706:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55637,
                  "initialValue": {
                    "id": 55636,
                    "name": "s_nopFeesJuels",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54015,
                    "src": "33730:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33706:38:49"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55638,
                      "name": "totalFeesToPay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55635,
                      "src": "33754:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55639,
                      "name": "weightsTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55624,
                      "src": "33771:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33754:29:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55644,
                  "nodeType": "IfStatement",
                  "src": "33750:55:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55641,
                        "name": "NoFeesToPay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53750,
                        "src": "33792:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33792:13:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55643,
                    "nodeType": "RevertStatement",
                    "src": "33785:20:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 55648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55645,
                        "name": "_linkLeftAfterNopFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55795,
                        "src": "33815:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$",
                          "typeString": "function () view returns (int256)"
                        }
                      },
                      "id": 55646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33815:23:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 55647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "33841:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "33815:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55652,
                  "nodeType": "IfStatement",
                  "src": "33811:61:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55649,
                        "name": "InsufficientBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53754,
                        "src": "33851:19:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33851:21:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55651,
                    "nodeType": "RevertStatement",
                    "src": "33844:28:49"
                  }
                },
                {
                  "assignments": [
                    55654
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55654,
                      "mutability": "mutable",
                      "name": "fundsLeft",
                      "nameLocation": "33886:9:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55717,
                      "src": "33879:16:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 55653,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "33879:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55656,
                  "initialValue": {
                    "id": 55655,
                    "name": "totalFeesToPay",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 55635,
                    "src": "33898:14:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33879:33:49"
                },
                {
                  "assignments": [
                    55658
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55658,
                      "mutability": "mutable",
                      "name": "numberOfNops",
                      "nameLocation": "33926:12:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 55717,
                      "src": "33918:20:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55657,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33918:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55662,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 55659,
                        "name": "s_nops",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53987,
                        "src": "33941:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                          "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                        }
                      },
                      "id": 55660,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "33948:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 105076,
                      "src": "33941:13:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 55661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33941:15:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33918:38:49"
                },
                {
                  "body": {
                    "id": 55711,
                    "nodeType": "Block",
                    "src": "34005:330:49",
                    "statements": [
                      {
                        "assignments": [
                          55674,
                          55676
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55674,
                            "mutability": "mutable",
                            "name": "nop",
                            "nameLocation": "34022:3:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55711,
                            "src": "34014:11:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55673,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "34014:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 55676,
                            "mutability": "mutable",
                            "name": "weight",
                            "nameLocation": "34035:6:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55711,
                            "src": "34027:14:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 55675,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "34027:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55681,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 55679,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55664,
                              "src": "34055:1:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 55677,
                              "name": "s_nops",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53987,
                              "src": "34045:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                                "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                              }
                            },
                            "id": 55678,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34052:2:49",
                            "memberName": "at",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105116,
                            "src": "34045:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_uint256_$returns$_t_address_$_t_uint256_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                              "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,uint256) view returns (address,uint256)"
                            }
                          },
                          "id": 55680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34045:12:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                            "typeString": "tuple(address,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "34013:44:49"
                      },
                      {
                        "assignments": [
                          55683
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55683,
                            "mutability": "mutable",
                            "name": "amount",
                            "nameLocation": "34158:6:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55711,
                            "src": "34151:13:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "typeName": {
                              "id": 55682,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "34151:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55693,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 55691,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 55688,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 55686,
                                      "name": "totalFeesToPay",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 55635,
                                      "src": "34175:14:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint96",
                                        "typeString": "uint96"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 55687,
                                      "name": "weight",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 55676,
                                      "src": "34192:6:49",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "34175:23:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 55689,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "34174:25:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 55690,
                                "name": "weightsTotal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55624,
                                "src": "34202:12:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "34174:40:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 55685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "34167:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint96_$",
                              "typeString": "type(uint96)"
                            },
                            "typeName": {
                              "id": 55684,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "34167:6:49",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 55692,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34167:48:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "34151:64:49"
                      },
                      {
                        "expression": {
                          "id": 55696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 55694,
                            "name": "fundsLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55654,
                            "src": "34223:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 55695,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55683,
                            "src": "34236:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "34223:19:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "id": 55697,
                        "nodeType": "ExpressionStatement",
                        "src": "34223:19:49"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55702,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55674,
                              "src": "34283:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 55703,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55683,
                              "src": "34288:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 55699,
                                  "name": "i_linkToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53963,
                                  "src": "34257:11:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 55698,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 103340,
                                "src": "34250:6:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 55700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "34250:19:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$103340",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 55701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34270:12:49",
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 103477,
                            "src": "34250:32:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$103340_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$103340_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 55704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34250:45:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55705,
                        "nodeType": "ExpressionStatement",
                        "src": "34250:45:49"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 55707,
                              "name": "nop",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55674,
                              "src": "34316:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 55708,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55683,
                              "src": "34321:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "id": 55706,
                            "name": "NopPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53835,
                            "src": "34308:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 55709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34308:20:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55710,
                        "nodeType": "EmitStatement",
                        "src": "34303:25:49"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55667,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55664,
                      "src": "33982:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 55668,
                      "name": "numberOfNops",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55658,
                      "src": "33986:12:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33982:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55712,
                  "initializationExpression": {
                    "assignments": [
                      55664
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55664,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "33975:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55712,
                        "src": "33967:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55663,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "33967:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55666,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "33979:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "33967:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "34000:3:49",
                      "subExpression": {
                        "id": 55670,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55664,
                        "src": "34002:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55672,
                    "nodeType": "ExpressionStatement",
                    "src": "34000:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "33962:373:49"
                },
                {
                  "expression": {
                    "id": 55715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55713,
                      "name": "s_nopFeesJuels",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54015,
                      "src": "34439:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 55714,
                      "name": "fundsLeft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55654,
                      "src": "34456:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "34439:26:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 55716,
                  "nodeType": "ExpressionStatement",
                  "src": "34439:26:49"
                }
              ]
            },
            "documentation": {
              "id": 55618,
              "nodeType": "StructuredDocumentation",
              "src": "33242:311:49",
              "text": "@notice Pays the Node Ops their outstanding balances.\n @dev some balance can remain after payments are done. This is at most the sum\n of the weight of all nops. Since nop weights are uint16s and we can have at\n most MAX_NUMBER_OF_NOPS NOPs, the highest possible value is 2**22 or 0.04 gjuels."
            },
            "functionSelector": "eff7cc48",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55621,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55620,
                  "name": "onlyOwnerOrAdminOrNop",
                  "nameLocations": [
                    "33582:21:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55965,
                  "src": "33582:21:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "33582:21:49"
              }
            ],
            "name": "payNops",
            "nameLocation": "33565:7:49",
            "parameters": {
              "id": 55619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33572:2:49"
            },
            "returnParameters": {
              "id": 55622,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33604:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 55767,
            "nodeType": "FunctionDefinition",
            "src": "34653:429:49",
            "nodes": [],
            "body": {
              "id": 55766,
              "nodeType": "Block",
              "src": "34738:344:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 55737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 55730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 55728,
                        "name": "feeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55721,
                        "src": "34748:8:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 55729,
                        "name": "i_linkToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53963,
                        "src": "34760:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "34748:23:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 55736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 55731,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55723,
                        "src": "34775:2:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 55734,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34789:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 55733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "34781:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 55732,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "34781:7:49",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 55735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "34781:10:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "34775:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "34748:43:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55741,
                  "nodeType": "IfStatement",
                  "src": "34744:79:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55738,
                        "name": "InvalidWithdrawParams",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53748,
                        "src": "34800:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34800:23:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55740,
                    "nodeType": "RevertStatement",
                    "src": "34793:30:49"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 55745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55742,
                        "name": "_linkLeftAfterNopFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55795,
                        "src": "34935:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$",
                          "typeString": "function () view returns (int256)"
                        }
                      },
                      "id": 55743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34935:23:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 55744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34961:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "34935:27:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55749,
                  "nodeType": "IfStatement",
                  "src": "34931:63:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55746,
                        "name": "LinkBalanceNotSettled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53801,
                        "src": "34971:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34971:23:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55748,
                    "nodeType": "RevertStatement",
                    "src": "34964:30:49"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 55754,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55723,
                        "src": "35031:2:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 55761,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "35070:4:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                  "typeString": "contract EVM2EVMOnRamp"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                  "typeString": "contract EVM2EVMOnRamp"
                                }
                              ],
                              "id": 55760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "35062:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 55759,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "35062:7:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 55762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35062:13:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "id": 55756,
                                "name": "feeToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55721,
                                "src": "35042:8:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 55755,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 103340,
                              "src": "35035:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 55757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35035:16:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$103340",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 55758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "35052:9:49",
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 103297,
                          "src": "35035:26:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 55763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35035:41:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 55751,
                            "name": "feeToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55721,
                            "src": "35008:8:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 55750,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 103340,
                          "src": "35001:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 55752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35001:16:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$103340",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 55753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35018:12:49",
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 103477,
                      "src": "35001:29:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$103340_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$103340_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 55764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35001:76:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55765,
                  "nodeType": "ExpressionStatement",
                  "src": "35001:76:49"
                }
              ]
            },
            "documentation": {
              "id": 55719,
              "nodeType": "StructuredDocumentation",
              "src": "34474:176:49",
              "text": "@notice Allows the owner to withdraw any ERC20 token that is not the fee token\n @param feeToken The token to withdraw\n @param to The address to send the tokens to"
            },
            "functionSelector": "549e946f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55726,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55725,
                  "name": "onlyOwnerOrAdmin",
                  "nameLocations": [
                    "34721:16:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 55984,
                  "src": "34721:16:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "34721:16:49"
              }
            ],
            "name": "withdrawNonLinkFees",
            "nameLocation": "34662:19:49",
            "parameters": {
              "id": 55724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55721,
                  "mutability": "mutable",
                  "name": "feeToken",
                  "nameLocation": "34690:8:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55767,
                  "src": "34682:16:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34682:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55723,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "34708:2:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55767,
                  "src": "34700:10:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55722,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34700:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34681:30:49"
            },
            "returnParameters": {
              "id": 55727,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34738:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55795,
            "nodeType": "FunctionDefinition",
            "src": "35408:227:49",
            "nodes": [],
            "body": {
              "id": 55794,
              "nodeType": "Block",
              "src": "35471:164:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 55792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 55781,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "35589:4:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                    "typeString": "contract EVM2EVMOnRamp"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EVM2EVMOnRamp_$55999",
                                    "typeString": "contract EVM2EVMOnRamp"
                                  }
                                ],
                                "id": 55780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "35581:7:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 55779,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "35581:7:49",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 55782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "35581:13:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 55776,
                                  "name": "i_linkToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53963,
                                  "src": "35558:11:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 55775,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 103340,
                                "src": "35551:6:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$103340_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 55777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "35551:19:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$103340",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 55778,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "35571:9:49",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 103297,
                            "src": "35551:29:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 55783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35551:44:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 55774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "35544:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 55773,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "35544:6:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 55784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35544:52:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 55789,
                              "name": "s_nopFeesJuels",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54015,
                              "src": "35614:14:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "id": 55788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "35606:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 55787,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "35606:7:49",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 55790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35606:23:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 55786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "35599:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 55785,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "35599:6:49",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 55791,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35599:31:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "35544:86:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 55772,
                  "id": 55793,
                  "nodeType": "Return",
                  "src": "35537:93:49"
                }
              ]
            },
            "documentation": {
              "id": 55768,
              "nodeType": "StructuredDocumentation",
              "src": "35297:108:49",
              "text": "@notice Calculate remaining LINK balance after paying nops\n @return balance if nops were to be paid"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_linkLeftAfterNopFees",
            "nameLocation": "35417:21:49",
            "parameters": {
              "id": 55769,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35438:2:49"
            },
            "returnParameters": {
              "id": 55772,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55771,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55795,
                  "src": "35463:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 55770,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35463:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35462:8:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 55805,
            "nodeType": "FunctionDefinition",
            "src": "35709:107:49",
            "nodes": [],
            "body": {
              "id": 55804,
              "nodeType": "Block",
              "src": "35775:41:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 55801,
                      "name": "_linkLeftAfterNopFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55795,
                      "src": "35788:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$",
                        "typeString": "function () view returns (int256)"
                      }
                    },
                    "id": 55802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35788:23:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 55800,
                  "id": 55803,
                  "nodeType": "Return",
                  "src": "35781:30:49"
                }
              ]
            },
            "baseFunctions": [
              49382
            ],
            "documentation": {
              "id": 55796,
              "nodeType": "StructuredDocumentation",
              "src": "35639:67:49",
              "text": "@notice Allow keeper to monitor funds available for paying nops"
            },
            "functionSelector": "d09dc339",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "linkAvailableForPayment",
            "nameLocation": "35718:23:49",
            "parameters": {
              "id": 55797,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35741:2:49"
            },
            "returnParameters": {
              "id": 55800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55799,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55805,
                  "src": "35767:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 55798,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35767:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35766:8:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55814,
            "nodeType": "FunctionDefinition",
            "src": "36143:96:49",
            "nodes": [],
            "body": {
              "id": 55813,
              "nodeType": "Block",
              "src": "36203:36:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 55811,
                    "name": "s_allowlistEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 54028,
                    "src": "36216:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 55810,
                  "id": 55812,
                  "nodeType": "Return",
                  "src": "36209:25:49"
                }
              ]
            },
            "documentation": {
              "id": 55806,
              "nodeType": "StructuredDocumentation",
              "src": "36031:109:49",
              "text": "@notice Gets whether the allowList functionality is enabled.\n @return true is enabled, false if not."
            },
            "functionSelector": "e0351e13",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowListEnabled",
            "nameLocation": "36152:19:49",
            "parameters": {
              "id": 55807,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36171:2:49"
            },
            "returnParameters": {
              "id": 55810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55809,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55814,
                  "src": "36197:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 55808,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "36197:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36196:6:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55831,
            "nodeType": "FunctionDefinition",
            "src": "36376:140:49",
            "nodes": [],
            "body": {
              "id": 55830,
              "nodeType": "Block",
              "src": "36438:78:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 55824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 55822,
                      "name": "s_allowlistEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54028,
                      "src": "36444:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 55823,
                      "name": "enabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55817,
                      "src": "36465:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "36444:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55825,
                  "nodeType": "ExpressionStatement",
                  "src": "36444:28:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 55827,
                        "name": "enabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55817,
                        "src": "36503:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 55826,
                      "name": "AllowListEnabledSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53821,
                      "src": "36483:19:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool)"
                      }
                    },
                    "id": 55828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36483:28:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55829,
                  "nodeType": "EmitStatement",
                  "src": "36478:33:49"
                }
              ]
            },
            "documentation": {
              "id": 55815,
              "nodeType": "StructuredDocumentation",
              "src": "36243:130:49",
              "text": "@notice Enables or disabled the allowList functionality.\n @param enabled Signals whether the allowlist should be enabled."
            },
            "functionSelector": "efeadb6d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55820,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55819,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "36428:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 101659,
                  "src": "36428:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "36428:9:49"
              }
            ],
            "name": "setAllowListEnabled",
            "nameLocation": "36385:19:49",
            "parameters": {
              "id": 55818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55817,
                  "mutability": "mutable",
                  "name": "enabled",
                  "nameLocation": "36410:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55831,
                  "src": "36405:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 55816,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "36405:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36404:14:49"
            },
            "returnParameters": {
              "id": 55821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36438:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55843,
            "nodeType": "FunctionDefinition",
            "src": "36697:103:49",
            "nodes": [],
            "body": {
              "id": 55842,
              "nodeType": "Block",
              "src": "36762:38:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 55838,
                        "name": "s_allowList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53995,
                        "src": "36775:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$105732_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 55839,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "36787:6:49",
                      "memberName": "values",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 105885,
                      "src": "36775:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$105732_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$105732_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                      }
                    },
                    "id": 55840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36775:20:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 55837,
                  "id": 55841,
                  "nodeType": "Return",
                  "src": "36768:27:49"
                }
              ]
            },
            "documentation": {
              "id": 55832,
              "nodeType": "StructuredDocumentation",
              "src": "36520:174:49",
              "text": "@notice Gets the allowed addresses.\n @return The allowed addresses.\n @dev May not work if allow list gets too large. Use events in that case to compute the set."
            },
            "functionSelector": "a7cd63b7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowList",
            "nameLocation": "36706:12:49",
            "parameters": {
              "id": 55833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36718:2:49"
            },
            "returnParameters": {
              "id": 55837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55836,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55843,
                  "src": "36744:16:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55834,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "36744:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55835,
                    "nodeType": "ArrayTypeName",
                    "src": "36744:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36743:18:49"
            },
            "scope": 55999,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55861,
            "nodeType": "FunctionDefinition",
            "src": "37007:147:49",
            "nodes": [],
            "body": {
              "id": 55860,
              "nodeType": "Block",
              "src": "37106:48:49",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 55856,
                        "name": "removes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55847,
                        "src": "37135:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "id": 55857,
                        "name": "adds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55850,
                        "src": "37144:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 55855,
                      "name": "_applyAllowListUpdates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55939,
                      "src": "37112:22:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,address[] memory)"
                      }
                    },
                    "id": 55858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37112:37:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55859,
                  "nodeType": "ExpressionStatement",
                  "src": "37112:37:49"
                }
              ]
            },
            "documentation": {
              "id": 55844,
              "nodeType": "StructuredDocumentation",
              "src": "36804:200:49",
              "text": "@notice Apply updates to the allow list.\n @param removes The addresses to be removed.\n @param adds The addresses to be added.\n @dev allowListing will be removed before public launch"
            },
            "functionSelector": "54c8a4f3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55853,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55852,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "37096:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 101659,
                  "src": "37096:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "37096:9:49"
              }
            ],
            "name": "applyAllowListUpdates",
            "nameLocation": "37016:21:49",
            "parameters": {
              "id": 55851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55847,
                  "mutability": "mutable",
                  "name": "removes",
                  "nameLocation": "37055:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55861,
                  "src": "37038:24:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55845,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "37038:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55846,
                    "nodeType": "ArrayTypeName",
                    "src": "37038:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55850,
                  "mutability": "mutable",
                  "name": "adds",
                  "nameLocation": "37081:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55861,
                  "src": "37064:21:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55848,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "37064:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55849,
                    "nodeType": "ArrayTypeName",
                    "src": "37064:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37037:49:49"
            },
            "returnParameters": {
              "id": 55854,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "37106:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55939,
            "nodeType": "FunctionDefinition",
            "src": "37314:501:49",
            "nodes": [],
            "body": {
              "id": 55938,
              "nodeType": "Block",
              "src": "37404:411:49",
              "nodes": [],
              "statements": [
                {
                  "body": {
                    "id": 55898,
                    "nodeType": "Block",
                    "src": "37455:134:49",
                    "statements": [
                      {
                        "assignments": [
                          55883
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55883,
                            "mutability": "mutable",
                            "name": "toRemove",
                            "nameLocation": "37471:8:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55898,
                            "src": "37463:16:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55882,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "37463:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55887,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55884,
                            "name": "removes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55865,
                            "src": "37482:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 55886,
                          "indexExpression": {
                            "id": 55885,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55872,
                            "src": "37490:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "37482:10:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "37463:29:49"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 55890,
                              "name": "toRemove",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55883,
                              "src": "37523:8:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 55888,
                              "name": "s_allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53995,
                              "src": "37504:11:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$105732_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 55889,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "37516:6:49",
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105786,
                            "src": "37504:18:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$105732_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$105732_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 55891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37504:28:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55897,
                        "nodeType": "IfStatement",
                        "src": "37500:83:49",
                        "trueBody": {
                          "id": 55896,
                          "nodeType": "Block",
                          "src": "37534:49:49",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 55893,
                                    "name": "toRemove",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 55883,
                                    "src": "37565:8:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 55892,
                                  "name": "AllowListRemove",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53817,
                                  "src": "37549:15:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 55894,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "37549:25:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 55895,
                              "nodeType": "EmitStatement",
                              "src": "37544:30:49"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55875,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55872,
                      "src": "37430:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55876,
                        "name": "removes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55865,
                        "src": "37434:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 55877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "37442:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "37434:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37430:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55899,
                  "initializationExpression": {
                    "assignments": [
                      55872
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55872,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "37423:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55899,
                        "src": "37415:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55871,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37415:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55874,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55873,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "37427:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "37415:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "37450:3:49",
                      "subExpression": {
                        "id": 55879,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55872,
                        "src": "37452:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55881,
                    "nodeType": "ExpressionStatement",
                    "src": "37450:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "37410:179:49"
                },
                {
                  "body": {
                    "id": 55936,
                    "nodeType": "Block",
                    "src": "37636:175:49",
                    "statements": [
                      {
                        "assignments": [
                          55912
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55912,
                            "mutability": "mutable",
                            "name": "toAdd",
                            "nameLocation": "37652:5:49",
                            "nodeType": "VariableDeclaration",
                            "scope": 55936,
                            "src": "37644:13:49",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 55911,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "37644:7:49",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 55916,
                        "initialValue": {
                          "baseExpression": {
                            "id": 55913,
                            "name": "adds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55868,
                            "src": "37660:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 55915,
                          "indexExpression": {
                            "id": 55914,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55901,
                            "src": "37665:1:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "37660:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "37644:23:49"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 55922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 55917,
                            "name": "toAdd",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55912,
                            "src": "37679:5:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 55920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "37696:1:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 55919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "37688:7:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 55918,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "37688:7:49",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 55921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "37688:10:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "37679:19:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55925,
                        "nodeType": "IfStatement",
                        "src": "37675:52:49",
                        "trueBody": {
                          "id": 55924,
                          "nodeType": "Block",
                          "src": "37700:27:49",
                          "statements": [
                            {
                              "id": 55923,
                              "nodeType": "Continue",
                              "src": "37710:8:49"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 55928,
                              "name": "toAdd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55912,
                              "src": "37754:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 55926,
                              "name": "s_allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53995,
                              "src": "37738:11:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$105732_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 55927,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "37750:3:49",
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 105759,
                            "src": "37738:15:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$105732_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$105732_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 55929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37738:22:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 55935,
                        "nodeType": "IfStatement",
                        "src": "37734:71:49",
                        "trueBody": {
                          "id": 55934,
                          "nodeType": "Block",
                          "src": "37762:43:49",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 55931,
                                    "name": "toAdd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 55912,
                                    "src": "37790:5:49",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 55930,
                                  "name": "AllowListAdd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53813,
                                  "src": "37777:12:49",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 55932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "37777:19:49",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 55933,
                              "nodeType": "EmitStatement",
                              "src": "37772:24:49"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55904,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55901,
                      "src": "37614:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55905,
                        "name": "adds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55868,
                        "src": "37618:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 55906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "37623:6:49",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "37618:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37614:15:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55937,
                  "initializationExpression": {
                    "assignments": [
                      55901
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55901,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "37607:1:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 55937,
                        "src": "37599:9:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55900,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37599:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55903,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "37611:1:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "37599:13:49"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "37631:3:49",
                      "subExpression": {
                        "id": 55908,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55901,
                        "src": "37633:1:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55910,
                    "nodeType": "ExpressionStatement",
                    "src": "37631:3:49"
                  },
                  "nodeType": "ForStatement",
                  "src": "37594:217:49"
                }
              ]
            },
            "documentation": {
              "id": 55862,
              "nodeType": "StructuredDocumentation",
              "src": "37158:153:49",
              "text": "@notice Internal version of applyAllowListUpdates to allow for reuse in the constructor.\n @dev allowListing will be removed before public launch"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_applyAllowListUpdates",
            "nameLocation": "37323:22:49",
            "parameters": {
              "id": 55869,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55865,
                  "mutability": "mutable",
                  "name": "removes",
                  "nameLocation": "37363:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55939,
                  "src": "37346:24:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55863,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "37346:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55864,
                    "nodeType": "ArrayTypeName",
                    "src": "37346:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 55868,
                  "mutability": "mutable",
                  "name": "adds",
                  "nameLocation": "37389:4:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 55939,
                  "src": "37372:21:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55866,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "37372:7:49",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55867,
                    "nodeType": "ArrayTypeName",
                    "src": "37372:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37345:49:49"
            },
            "returnParameters": {
              "id": 55870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "37404:0:49"
            },
            "scope": 55999,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55965,
            "nodeType": "ModifierDefinition",
            "src": "38104:181:49",
            "nodes": [],
            "body": {
              "id": 55964,
              "nodeType": "Block",
              "src": "38137:148:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 55958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 55951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 55946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 55942,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "38147:3:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 55943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "38151:6:49",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "38147:10:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 55944,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 101614,
                            "src": "38161:5:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 55945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38161:7:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "38147:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 55950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 55947,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "38172:3:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 55948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "38176:6:49",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "38172:10:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 55949,
                          "name": "s_admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45304,
                          "src": "38186:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "38172:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "38147:46:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 55957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "38197:28:49",
                      "subExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 55954,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "38214:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 55955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "38218:6:49",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "38214:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 55952,
                            "name": "s_nops",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53987,
                            "src": "38198:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressToUintMap_$104974_storage",
                              "typeString": "struct EnumerableMap.AddressToUintMap storage ref"
                            }
                          },
                          "id": 55953,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "38205:8:49",
                          "memberName": "contains",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 105061,
                          "src": "38198:15:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_AddressToUintMap_$104974_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressToUintMap_$104974_storage_ptr_$",
                            "typeString": "function (struct EnumerableMap.AddressToUintMap storage pointer,address) view returns (bool)"
                          }
                        },
                        "id": 55956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "38198:27:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "38147:78:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55962,
                  "nodeType": "IfStatement",
                  "src": "38143:130:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55959,
                        "name": "OnlyCallableByOwnerOrAdminOrNop",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53746,
                        "src": "38240:31:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38240:33:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55961,
                    "nodeType": "RevertStatement",
                    "src": "38233:40:49"
                  }
                },
                {
                  "id": 55963,
                  "nodeType": "PlaceholderStatement",
                  "src": "38279:1:49"
                }
              ]
            },
            "documentation": {
              "id": 55940,
              "nodeType": "StructuredDocumentation",
              "src": "38030:71:49",
              "text": "@dev Require that the sender is the owner or the fee admin or a nop"
            },
            "name": "onlyOwnerOrAdminOrNop",
            "nameLocation": "38113:21:49",
            "parameters": {
              "id": 55941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38134:2:49"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55984,
            "nodeType": "ModifierDefinition",
            "src": "38354:133:49",
            "nodes": [],
            "body": {
              "id": 55983,
              "nodeType": "Block",
              "src": "38382:105:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 55977,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 55972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 55968,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "38392:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 55969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "38396:6:49",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "38392:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 55970,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 101614,
                          "src": "38406:5:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 55971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "38406:7:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "38392:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 55976,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 55973,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "38417:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 55974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "38421:6:49",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "38417:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 55975,
                        "name": "s_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45304,
                        "src": "38431:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "38417:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "38392:46:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55981,
                  "nodeType": "IfStatement",
                  "src": "38388:87:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55978,
                        "name": "OnlyCallableByOwnerOrAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53744,
                        "src": "38447:26:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38447:28:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55980,
                    "nodeType": "RevertStatement",
                    "src": "38440:35:49"
                  }
                },
                {
                  "id": 55982,
                  "nodeType": "PlaceholderStatement",
                  "src": "38481:1:49"
                }
              ]
            },
            "documentation": {
              "id": 55966,
              "nodeType": "StructuredDocumentation",
              "src": "38289:62:49",
              "text": "@dev Require that the sender is the owner or the fee admin"
            },
            "name": "onlyOwnerOrAdmin",
            "nameLocation": "38363:16:49",
            "parameters": {
              "id": 55967,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38379:2:49"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55998,
            "nodeType": "ModifierDefinition",
            "src": "38599:95:49",
            "nodes": [],
            "body": {
              "id": 55997,
              "nodeType": "Block",
              "src": "38622:72:49",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 55988,
                            "name": "i_armProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53975,
                            "src": "38637:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 55987,
                          "name": "IARM",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49092,
                          "src": "38632:4:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IARM_$49092_$",
                            "typeString": "type(contract IARM)"
                          }
                        },
                        "id": 55989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "38632:16:49",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IARM_$49092",
                          "typeString": "contract IARM"
                        }
                      },
                      "id": 55990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "38649:8:49",
                      "memberName": "isCursed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 49091,
                      "src": "38632:25:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                        "typeString": "function () view external returns (bool)"
                      }
                    },
                    "id": 55991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38632:27:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55995,
                  "nodeType": "IfStatement",
                  "src": "38628:54:49",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 55992,
                        "name": "BadARMSignal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 53799,
                        "src": "38668:12:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 55993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38668:14:49",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 55994,
                    "nodeType": "RevertStatement",
                    "src": "38661:21:49"
                  }
                },
                {
                  "id": 55996,
                  "nodeType": "PlaceholderStatement",
                  "src": "38688:1:49"
                }
              ]
            },
            "documentation": {
              "id": 55985,
              "nodeType": "StructuredDocumentation",
              "src": "38491:105:49",
              "text": "@notice Ensure that the ARM has not emitted a bad signal, and that the latest heartbeat is not stale."
            },
            "name": "whenHealthy",
            "nameLocation": "38608:11:49",
            "parameters": {
              "id": 55986,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38619:2:49"
            },
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 53714,
              "name": "IEVM2AnyOnRamp",
              "nameLocations": [
                "1611:14:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 49215,
              "src": "1611:14:49"
            },
            "id": 53715,
            "nodeType": "InheritanceSpecifier",
            "src": "1611:14:49"
          },
          {
            "baseName": {
              "id": 53716,
              "name": "ILinkAvailable",
              "nameLocations": [
                "1627:14:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 49383,
              "src": "1627:14:49"
            },
            "id": 53717,
            "nodeType": "InheritanceSpecifier",
            "src": "1627:14:49"
          },
          {
            "baseName": {
              "id": 53718,
              "name": "AggregateRateLimiter",
              "nameLocations": [
                "1643:20:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 45485,
              "src": "1643:20:49"
            },
            "id": 53719,
            "nodeType": "InheritanceSpecifier",
            "src": "1643:20:49"
          },
          {
            "baseName": {
              "id": 53720,
              "name": "TypeAndVersionInterface",
              "nameLocations": [
                "1665:23:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 101478,
              "src": "1665:23:49"
            },
            "id": 53721,
            "nodeType": "InheritanceSpecifier",
            "src": "1665:23:49"
          }
        ],
        "canonicalName": "EVM2EVMOnRamp",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 53713,
          "nodeType": "StructuredDocumentation",
          "src": "1290:295:49",
          "text": "@notice The onRamp is a contract that handles lane-specific fee logic, NOP payments,\n bridegable token support and an allowList.\n @dev The EVM2EVMOnRamp, CommitStore and EVM2EVMOffRamp form an xchain upgradeable unit. Any change to one of them\n results an onchain upgrade of all 3."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          55999,
          101478,
          45485,
          101676,
          101498,
          101660,
          101898,
          49383,
          49215
        ],
        "name": "EVM2EVMOnRamp",
        "nameLocation": "1594:13:49",
        "scope": 56000,
        "usedErrors": [
          45298,
          49928,
          49930,
          49938,
          49946,
          49952,
          49958,
          53742,
          53744,
          53746,
          53748,
          53750,
          53752,
          53754,
          53756,
          53758,
          53764,
          53766,
          53768,
          53773,
          53775,
          53777,
          53779,
          53781,
          53785,
          53787,
          53791,
          53793,
          53797,
          53799,
          53801,
          53805,
          53809
        ]
      }
    ],
    "license": "BUSL-1.1"
  },
  "id": 49
}