{
  "contractName": "Bridge",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "domainID",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "accessControl",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "funcSig",
          "type": "bytes4"
        }
      ],
      "name": "AccessNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DepositToCurrentDomain",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EmptyProposalsArray",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidProposalSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MPCAddressAlreadySet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MPCAddressIsNotUpdatable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MPCAddressNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MPCAddressZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NonceDecrementsNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ResourceIDNotMappedToHandler",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAccessControl",
          "type": "address"
        }
      ],
      "name": "AccessControlChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "depositNonce",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "handlerResponse",
          "type": "bytes"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EndKeygen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "lowLevelData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "originDomainID",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "depositNonce",
          "type": "uint64"
        }
      ],
      "name": "FailedHandlerExecution",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newFeeHandler",
          "type": "address"
        }
      ],
      "name": "FeeHandlerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "hash",
          "type": "string"
        }
      ],
      "name": "KeyRefresh",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "originDomainID",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "depositNonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "handlerResponse",
          "type": "bytes"
        }
      ],
      "name": "ProposalExecution",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "txHash",
          "type": "string"
        }
      ],
      "name": "Retry",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "StartKeygen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "_MPCAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_accessControl",
      "outputs": [
        {
          "internalType": "contract IAccessControlSegregator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "_depositCounts",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_domainID",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_feeHandler",
      "outputs": [
        {
          "internalType": "contract IFeeHandler",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToHandlerAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isValidForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "usedNonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "adminPauseTransfers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "adminUnpauseTransfers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "handlerAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "adminSetResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "handlerAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "adminSetBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "domainID",
          "type": "uint8"
        },
        {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }
      ],
      "name": "adminSetDepositNonce",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "valid",
          "type": "bool"
        }
      ],
      "name": "adminSetForwarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newAccessControl",
          "type": "address"
        }
      ],
      "name": "adminChangeAccessControl",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newFeeHandler",
          "type": "address"
        }
      ],
      "name": "adminChangeFeeHandler",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "handlerAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "adminWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "depositData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "feeData",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "depositNonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "handlerResponse",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "internalType": "bytes32",
              "name": "resourceID",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Bridge.Proposal",
          "name": "proposal",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "internalType": "bytes32",
              "name": "resourceID",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Bridge.Proposal[]",
          "name": "proposals",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "executeProposals",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startKeygen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "MPCAddress",
          "type": "address"
        }
      ],
      "name": "endKeygen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "hash",
          "type": "string"
        }
      ],
      "name": "refreshKey",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "txHash",
          "type": "string"
        }
      ],
      "name": "retry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "domainID",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "depositNonce",
          "type": "uint256"
        }
      ],
      "name": "isProposalExecuted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "internalType": "bytes32",
              "name": "resourceID",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Bridge.Proposal[]",
          "name": "proposals",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"domainID\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"accessControl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"funcSig\",\"type\":\"bytes4\"}],\"name\":\"AccessNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositToCurrentDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyProposalsArray\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProposalSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MPCAddressAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MPCAddressIsNotUpdatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MPCAddressNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MPCAddressZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonceDecrementsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResourceIDNotMappedToHandler\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControl\",\"type\":\"address\"}],\"name\":\"AccessControlChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"handlerResponse\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EndKeygen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"originDomainID\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"}],\"name\":\"FailedHandlerExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeHandler\",\"type\":\"address\"}],\"name\":\"FeeHandlerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"hash\",\"type\":\"string\"}],\"name\":\"KeyRefresh\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"originDomainID\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"handlerResponse\",\"type\":\"bytes\"}],\"name\":\"ProposalExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"txHash\",\"type\":\"string\"}],\"name\":\"Retry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StartKeygen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_MPCAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_accessControl\",\"outputs\":[{\"internalType\":\"contract IAccessControlSegregator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"_depositCounts\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_domainID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_feeHandler\",\"outputs\":[{\"internalType\":\"contract IFeeHandler\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToHandlerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAccessControl\",\"type\":\"address\"}],\"name\":\"adminChangeAccessControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newFeeHandler\",\"type\":\"address\"}],\"name\":\"adminChangeFeeHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminPauseTransfers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handlerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"adminSetBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"domainID\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"adminSetDepositNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"adminSetForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handlerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"args\",\"type\":\"bytes\"}],\"name\":\"adminSetResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminUnpauseTransfers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handlerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"adminWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"depositData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"feeData\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"handlerResponse\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"MPCAddress\",\"type\":\"address\"}],\"name\":\"endKeygen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"originDomainID\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Bridge.Proposal\",\"name\":\"proposal\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"originDomainID\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Bridge.Proposal[]\",\"name\":\"proposals\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"executeProposals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"domainID\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"depositNonce\",\"type\":\"uint256\"}],\"name\":\"isProposalExecuted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"hash\",\"type\":\"string\"}],\"name\":\"refreshKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"txHash\",\"type\":\"string\"}],\"name\":\"retry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startKeygen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"usedNonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"originDomainID\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"depositNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Bridge.Proposal[]\",\"name\":\"proposals\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"adminChangeAccessControl(address)\":{\"params\":{\"newAccessControl\":\"Address {_accessControl} will be updated to.\"}},\"adminChangeFeeHandler(address)\":{\"params\":{\"newFeeHandler\":\"Address {_feeHandler} will be updated to.\"}},\"adminSetBurnable(address,address)\":{\"params\":{\"handlerAddress\":\"Address of handler resource will be set for.\",\"tokenAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\"}},\"adminSetDepositNonce(uint8,uint64)\":{\"params\":{\"domainID\":\"Domain ID for increasing nonce.\",\"nonce\":\"The nonce value to be set.\"}},\"adminSetForwarder(address,bool)\":{\"params\":{\"forwarder\":\"Forwarder address to be added.\",\"valid\":\"Decision for the specific forwarder.\"}},\"adminSetResource(address,bytes32,address,bytes)\":{\"params\":{\"args\":\"Additional data to be passed to specified handler.\",\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"handlerAddress\":\"Address of handler resource will be set for.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"adminWithdraw(address,bytes)\":{\"params\":{\"data\":\"ABI-encoded withdrawal params relevant to the specified handler.\",\"handlerAddress\":\"Address of handler to withdraw from.\"}},\"constructor\":{\"params\":{\"accessControl\":\"Address of access control contract.\",\"domainID\":\"ID of chain the Bridge contract exists on.\"}},\"deposit(uint8,bytes32,bytes,bytes)\":{\"params\":{\"depositData\":\"Additional data to be passed to specified handler.\",\"destinationDomainID\":\"ID of chain deposit will be bridged to.\",\"feeData\":\"Additional data to be passed to the fee handler.\",\"resourceID\":\"ResourceID used to find address of handler to be used for deposit.\"},\"returns\":{\"depositNonce\":\"deposit nonce for the destination domain.\",\"handlerResponse\":\"a handler response: - ERC20Handler: responds with an empty data. - ERC721Handler: responds with the deposited token metadata acquired by calling a tokenURI method in the token contract. - GmpHandler: responds with an empty data.\"}},\"endKeygen(address)\":{\"params\":{\"MPCAddress\":\"Address that will be set as MPC address.\"}},\"executeProposal((uint8,uint64,bytes32,bytes),bytes)\":{\"params\":{\"proposal\":\"Proposal which consists of: - originDomainID ID of chain deposit originated from. - resourceID ResourceID to be used when making deposits. - depositNonce ID of deposit generated by origin Bridge contract. - data Data originally provided when deposit was made.\",\"signature\":\"bytes memory signature composed of MPC key shares\"}},\"executeProposals((uint8,uint64,bytes32,bytes)[],bytes)\":{\"params\":{\"proposals\":\"Array of Proposal which consists of: - originDomainID ID of chain deposit originated from. - resourceID ResourceID to be used when making deposits. - depositNonce ID of deposit generated by origin Bridge contract. - data Data originally provided when deposit was made.\",\"signature\":\"bytes memory signature for the whole array composed of MPC key shares\"}},\"isProposalExecuted(uint8,uint256)\":{\"params\":{\"depositNonce\":\"ID of deposit generated by origin Bridge contract.\",\"domainID\":\"ID of chain deposit originated from.\"},\"returns\":{\"_0\":\"Boolean value depending if deposit nonce has already been used or not.\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"refreshKey(string)\":{\"params\":{\"hash\":\"Topology hash which prevents changes during refresh process.\"}},\"retry(string)\":{\"params\":{\"txHash\":\"Transaction hash which contains deposit that should be retried\"}},\"verify((uint8,uint64,bytes32,bytes)[],bytes)\":{\"params\":{\"proposals\":\"array of Proposals.\",\"signature\":\"signature bytes memory signature composed of MPC key shares.\"},\"returns\":{\"_0\":\"Boolean value depending if signer is vaild or not.\"}}},\"title\":\"Facilitates deposits and creation of deposit proposals, and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adminChangeAccessControl(address)\":{\"notice\":\"Changes access control contract address.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminChangeFeeHandler(address)\":{\"notice\":\"Changes deposit fee handler contract address.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminPauseTransfers()\":{\"notice\":\"Pauses deposits, proposal creation and voting, and deposit executions.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminSetBurnable(address,address)\":{\"notice\":\"Sets a resource as burnable for handler contracts that use the IERCHandler interface.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminSetDepositNonce(uint8,uint64)\":{\"notice\":\"Sets the nonce for the specific domainID.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminSetForwarder(address,bool)\":{\"notice\":\"Set a forwarder to be used.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminSetResource(address,bytes32,address,bytes)\":{\"notice\":\"Sets a new resource for handler contracts that use the IERCHandler interface, and maps the {handlerAddress} to {resourceID} in {_resourceIDToHandlerAddress}.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"adminUnpauseTransfers()\":{\"notice\":\"Unpauses deposits, proposal creation and voting, and deposit executions.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.MPC address has to be set before Bridge can be unpaused\"},\"adminWithdraw(address,bytes)\":{\"notice\":\"Used to manually withdraw funds from ERC safes.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"constructor\":{\"notice\":\"Initializes Bridge, creates and grants {_msgSender()} the admin role, sets access control contract for bridge and sets the inital state of the Bridge to paused.\"},\"deposit(uint8,bytes32,bytes,bytes)\":{\"notice\":\"Initiates a transfer using a specified handler contract.Only callable when Bridge is not paused.Emits {Deposit} event with all necessary parameters and a handler response.\"},\"endKeygen(address)\":{\"notice\":\"This method can be called only once, after the MPC address is set Bridge is unpaused. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"executeProposal((uint8,uint64,bytes32,bytes),bytes)\":{\"notice\":\"Executes a deposit proposal using a specified handler contract (only if signature is signed by MPC).Failed executeProposal from handler don't revert, emits {FailedHandlerExecution} event.Emits {ProposalExecution} event.For ERC handlers, when execution fails, the handler will terminate the function with revert.\"},\"executeProposals((uint8,uint64,bytes32,bytes)[],bytes)\":{\"notice\":\"Executes a batch of deposit proposals using a specified handler contract for each proposal (only if signature is signed by MPC).If executeProposals fails it doesn't revert, emits {FailedHandlerExecution} event.Emits {ProposalExecution} event for each proposal in the batch.For ERC handlers, when execution fails, the handler will terminate the function with revert.\"},\"isProposalExecuted(uint8,uint256)\":{\"notice\":\"Returns a boolean value.\"},\"refreshKey(string)\":{\"notice\":\"It's used to trigger the belonging process on the MPC side. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"retry(string)\":{\"notice\":\"This method is used to trigger the process for retrying failed deposits on the MPC side.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"startKeygen()\":{\"notice\":\"Once MPC address is set, this method can't be invoked anymore. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.\"},\"verify((uint8,uint64,bytes32,bytes)[],bytes)\":{\"notice\":\"Verifies that proposal data is signed by MPC address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/Bridge.sol\":\"Bridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x3c07f43e60e099b3b157243b3152722e73b80eeb7985c2cd73712828d7f7da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://466ffb5a6e3bd65fffd996f9287ffd240ea21588a338c6efe143d94eaed014a7\",\"dweb:/ipfs/Qmans3vvPJZcvxe9KLAPc9Xwe4TFVTJdzaQGpi62Vrhoe2\"]},\"@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol\":{\"keccak256\":\"0x6688fad58b9ec0286d40fa957152e575d5d8bd4c3aa80985efdb11b44f776ae7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bc00ab7f133cdaafd212a5cc6a16c8d37319721105d130c8e5af0c4e8f170ba\",\"dweb:/ipfs/QmVmf6LVMfFiEkvKYLzSv3bGHzymEW93AcUuFrNUdY3NtT\"]},\"project:/contracts/Bridge.sol\":{\"keccak256\":\"0xa3263ddcf18b32a6b17b8d7e0b41df45ba9e64aa624f60bab1c3ce4c8113c14a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3e0d2550a40f0ddb70e6844b30ea0df8e09d55dda17296054833eb8b542bd58f\",\"dweb:/ipfs/QmReTb2EJi9cbRonmJ4p59qobpERBr1Q4ity9ab9RsMTPc\"]},\"project:/contracts/interfaces/IAccessControlSegregator.sol\":{\"keccak256\":\"0xed7e453f753e51d467262869233b5e77f0c9cc065cae73227ba454dbbde70c90\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://93b192802c19f4a2c2b8bd7c9267f7100a680f0f3074ce0be11cd5bd7f01eee5\",\"dweb:/ipfs/QmR5pgDgjrq4p5U8vXEin6Uw9CxNN6YvLJYhf6hshoD24u\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0xf360099ea5a64a9ba351b0807e0bf376c432239af1cc314ef2e44b157afe56fd\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3b05bd76975b1d128c7b1c8ed93cf35c532737b84807605320a41f193c0e00ef\",\"dweb:/ipfs/QmNQLZWyPb2Nd3JmPaDN5rPyvFzcMtuW9xgp8a7hmgPsUo\"]},\"project:/contracts/interfaces/IFeeHandler.sol\":{\"keccak256\":\"0xb91ebf155a2ec6e36d2e5f884f829075cff788aaa367d6ffb09d3f956cb5384a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://102bea5ee61e82b2ed2c0db49dac1bfda190fde61ec25cc8d5988d1aad496e9b\",\"dweb:/ipfs/QmUonDedQaYyP5pz71JvmzMm9f9wg96ZpCYowSr9RMKs1U\"]},\"project:/contracts/interfaces/IHandler.sol\":{\"keccak256\":\"0x6ff2c7a2a169c519a9ebd670069c8dc902e09cf9dccd52ce87a110799d3dfd2e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://73eacb1eaa4de346d24fd3174fb21d2b16f1350b9599813f1bb292eecbce806d\",\"dweb:/ipfs/QmTGT3orocKxkJ3wud312TFB4CSVYJeGiTHGZie8vkNKxM\"]},\"project:/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xd3cfbc0e828a97df0412913899721ec39b2512bec2785ce8558f5d3b0065f904\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26819163a4c49eb53e6fa92e0fbd6ef8cd3d94d1e6324de5b9e0468bf092679f\",\"dweb:/ipfs/QmZ8D6NCw9pqxAatM7Z8VDvxJtxendqKQeMu6A5e8YB1qd\"]}},\"version\":1}",
  "bytecode": "0x6101606040523480156200001257600080fd5b5060405162002a2838038062002a28833981016040819052620000359162000253565b604080518082018252600681526542726964676560d01b6020808301918252835180850190945260058452640332e312e360dc1b908401526000805460ff191690558151902060e08190527f0e23d0b508e2034d01a5c31f12e9d9bbb31708c5518057dde31201ab93b17cef6101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200011f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c052610120525050505060ff821661014052600280546001600160a01b0319166001600160a01b038316179055620001656200015f6200016d565b620001b0565b5050620002a2565b600033601436108015906200019a57506001600160a01b03811660009081526005602052604090205460ff165b15620001ab575060131936013560601c5b919050565b620001ba62000206565b6000805460ff191660011790556040516001600160a01b03821681527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200160405180910390a150565b60005460ff1615620002515760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b565b600080604083850312156200026757600080fd5b825160ff811681146200027957600080fd5b60208401519092506001600160a01b03811681146200029757600080fd5b809150509250929050565b60805160a05160c05160e05161010051610120516101405161271d6200030b6000396000818161043001528181610b330152610c19015260006118a6015260006118f5015260006118d001526000611829015260006118530152600061187d015261271d6000f3fe60806040526004361061019c5760003560e01c80638c0c2631116100ec578063d2e5fae91161008a578063f0ead51e11610064578063f0ead51e14610524578063f8c39e4414610544578063fe4648f414610574578063ffaac0eb1461059457600080fd5b8063d2e5fae9146104c4578063d8236744146104e4578063edc20c3c1461050457600080fd5b80639dd694f4116100c65780639dd694f41461041e578063a546e8a114610464578063bd2a182014610484578063d15ef64e146104a457600080fd5b80638c0c2631146103be5780639ae0bf45146103de5780639d33b6d4146103fe57600080fd5b80635c975abb1161015957806380ae1c281161013357806380ae1c281461033357806384db809f146103485780638a3234c71461037e5780638b63aebf1461039e57600080fd5b80635c975abb146102d95780636ba6db6b146102fd57806373c45c981461031257600080fd5b8063059972d2146101a157806308a64104146101e35780631f5c64c114610229578063366b48851461024b57806344e8e4301461026b5780634b0b919d1461028b575b600080fd5b3480156101ad57600080fd5b506000546101c69061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ef57600080fd5b5061021b6101fe366004611cf1565b600660209081526000928352604080842090915290825290205481565b6040519081526020016101da565b34801561023557600080fd5b50610249610244366004611ed5565b6105a9565b005b34801561025757600080fd5b50610249610266366004611fbf565b610a5c565b34801561027757600080fd5b506002546101c6906001600160a01b031681565b34801561029757600080fd5b506102c16102a636600461200f565b6003602052600090815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101da565b3480156102e557600080fd5b5060005460ff165b60405190151581526020016101da565b34801561030957600080fd5b50610249610ab3565b61032561032036600461202a565b610b25565b6040516101da92919061210b565b34801561033f57600080fd5b50610249610ddd565b34801561035457600080fd5b506101c661036336600461212d565b6004602052600090815260409020546001600160a01b031681565b34801561038a57600080fd5b5061024961039936600461215d565b610e07565b3480156103aa57600080fd5b506102496103b93660046121cb565b610eae565b3480156103ca57600080fd5b506102496103d93660046121e6565b610f14565b3480156103ea57600080fd5b506102ed6103f9366004611cf1565b610f90565b34801561040a57600080fd5b506102496104193660046121cb565b610fdf565b34801561042a57600080fd5b506104527f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101da565b34801561047057600080fd5b506102ed61047f366004611ed5565b611045565b34801561049057600080fd5b5061024961049f366004612219565b6112a0565b3480156104b057600080fd5b506102496104bf366004612274565b6112e6565b3480156104d057600080fd5b506102496104df3660046121cb565b611329565b3480156104f057600080fd5b506102496104ff366004611fbf565b6113f3565b34801561051057600080fd5b5061024961051f3660046122ab565b61143a565b34801561053057600080fd5b5061024961053f3660046122d5565b611503565b34801561055057600080fd5b506102ed61055f3660046121cb565b60056020526000908152604090205460ff1681565b34801561058057600080fd5b506001546101c6906001600160a01b031681565b3480156105a057600080fd5b50610249611579565b6105b16115ca565b82516105d0576040516363e60a4960e01b815260040160405180910390fd5b6105db838383611045565b6105f8576040516337077ca360e01b815260040160405180910390fd5b60005b8351811015610a565761065184828151811061061957610619612323565b60200260200101516000015185838151811061063757610637612323565b6020026020010151602001516001600160401b0316610f90565b1561065b57610a44565b60006004600086848151811061067357610673612323565b602002602001015160400151815260200190815260200160002060009054906101000a90046001600160a01b031690506000818684815181106106b8576106b8612323565b6020026020010151606001516040516020016106d5929190612339565b604051602081830303815290604052805190602001209050600082905061010087858151811061070757610707612323565b60200260200101516020015161071d9190612387565b6001600160401b03166001901b6006600089878151811061074057610740612323565b60200260200101516000015160ff1660ff16815260200190815260200160002060006101008a888151811061077757610777612323565b60200260200101516020015161078d91906123c3565b6001600160401b0316815260200190815260200160002060008282541792505081905550806001600160a01b031663e248cff28886815181106107d2576107d2612323565b6020026020010151604001518987815181106107f0576107f0612323565b6020026020010151606001516040518363ffffffff1660e01b81526004016108199291906123e9565b6000604051808303816000875af192505050801561085957506040513d6000823e601f3d908101601f191682016040526108569190810190612402565b60015b6109c8573d808015610887576040519150601f19603f3d011682016040523d82523d6000602084013e61088c565b606091505b507f19f774a63ee465292252a9981ae52051acc13da671c698ac4b5bf25b38c5b6fc818987815181106108c1576108c1612323565b6020026020010151600001518a88815181106108df576108df612323565b6020026020010151602001516040516108fa93929190612478565b60405180910390a161010088868151811061091757610917612323565b60200260200101516020015161092d9190612387565b6001600160401b03166001901b19600660008a888151811061095157610951612323565b60200260200101516000015160ff1660ff16815260200190815260200160002060006101008b898151811061098857610988612323565b60200260200101516020015161099e91906123c3565b6001600160401b0316815260208101919091526040016000208054909116905550610a4492505050565b7fb83128682faafdf78efbb57c4c9acdc12ba648a50eca00b8b72818ea2d8e5cf98886815181106109fb576109fb612323565b602002602001015160000151898781518110610a1957610a19612323565b6020026020010151602001518584604051610a3794939291906124ad565b60405180910390a1505050505b80610a4e816124e8565b9150506105fb565b50505050565b610a796000356001600160e01b031916610a74611610565b611651565b7f9069464c059b9a90135a3fdf2c47855263346b912894ad7562d989532c3fad4c81604051610aa89190612503565b60405180910390a150565b610acb6000356001600160e01b031916610a74611610565b60005461010090046001600160a01b031615610afa5760405163229924e160e01b815260040160405180910390fd5b6040517f24e723a5c27b62883404028b8dee9965934de6a46828cda2ff63bf9a5e65ce4390600090a1565b60006060610b316115ca565b7f000000000000000000000000000000000000000000000000000000000000000060ff168860ff161415610b7857604051630137058b60e61b815260040160405180910390fd5b6000610b82611610565b6001549091506001600160a01b0316610bed573415610be85760405162461bcd60e51b815260206004820152601d60248201527f6e6f2046656548616e646c65722c206d73672e76616c756520213d203000000060448201526064015b60405180910390fd5b610c80565b600154604051632530706560e01b81526001600160a01b03909116906325307065903490610c4d9085907f0000000000000000000000000000000000000000000000000000000000000000908f908f908f908f908f908f9060040161253f565b6000604051808303818588803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505b6000888152600460205260409020546001600160a01b031680610cb6576040516308c231dd60e31b815260040160405180910390fd5b60ff8a1660009081526003602052604081208054909190610cdf906001600160401b031661259b565b91906101000a8154816001600160401b0302191690836001600160401b03160217905593506000819050806001600160a01b031663b07e54bb8b858c8c6040518563ffffffff1660e01b8152600401610d3b94939291906125c2565b6000604051808303816000875af1158015610d5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d829190810190612402565b9350826001600160a01b03167f17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f8c8c888d8d8a604051610dc7969594939291906125ed565b60405180910390a2505050965096945050505050565b610df56000356001600160e01b031916610a74611610565b610e05610e00611610565b61170b565b565b610e1f6000356001600160e01b031916610a74611610565b60008481526004602081905260409182902080546001600160a01b0319166001600160a01b0389169081179091559151630fa8675b60e41b815287929163fa8675b091610e74918991899189918991016125c2565b600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b50505050505050505050565b610ec66000356001600160e01b031916610a74611610565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f729170bd142e4965055b26a285faeedf03baf2b915bfc5a7c75d24b45815ff2c90602001610aa8565b610f2c6000356001600160e01b031916610a74611610565b6040516307b7ed9960e01b81526001600160a01b0382811660048301528391908216906307b7ed99906024015b600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b50505050505050565b6000610f9e6101008361263e565b60ff84166000908152600660205260408120600190921b9190610fc361010086612652565b8152602001908152602001600020541660001415905092915050565b610ff76000356001600160e01b031916610a74611610565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f497acaa34ac19c2a2a579ad43eca493b4fea820459e254e9383e7dda216b0f0490602001610aa8565b60008084516001600160401b0381111561106157611061611d1b565b60405190808252806020026020018201604052801561108a578160200160208202803683370190505b50905060005b85518110156111bc577fcc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a708682815181106110cc576110cc612323565b6020026020010151600001518783815181106110ea576110ea612323565b60200260200101516020015188848151811061110857611108612323565b60200260200101516040015189858151811061112657611126612323565b6020026020010151606001518051906020012060405160200161117795949392919094855260ff9390931660208501526001600160401b039190911660408401526060830152608082015260a00190565b6040516020818303038152906040528051906020012082828151811061119f5761119f612323565b6020908102919091010152806111b4816124e8565b915050611090565b50600061128085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405161127a92507f989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5915061122f908790602001612666565b6040516020818303038152906040528051906020012060405160200161125f929190918252602082015260400190565b60405160208183030381529060405280519060200120611759565b906117ad565b60005461010090046001600160a01b039081169116149695505050505050565b6112b86000356001600160e01b031916610a74611610565b60405163025a3c9960e21b815282906001600160a01b03821690630968f26490610f59908590600401612503565b6112fe6000356001600160e01b031916610a74611610565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6113416000356001600160e01b031916610a74611610565b6001600160a01b03811661136857604051631449e68f60e01b815260040160405180910390fd5b60005461010090046001600160a01b03161561139757604051632748fb3360e21b815260040160405180910390fd5b60008054610100600160a81b0319166101006001600160a01b038416021790556113c76113c2611610565b6117d1565b6040517f4187686ceef7b541a1f224d48d4cded8f2c535e0e58ac0f0514071b1de3dad5790600090a150565b61140b6000356001600160e01b031916610a74611610565b7fe78d813a9260522f81d6c761e311727b2e19008daadd2b9e174be86bc4f06a4b81604051610aa89190612503565b6114526000356001600160e01b031916610a74611610565b60ff82166000908152600360205260409020546001600160401b03908116908216116114cf5760405162461bcd60e51b815260206004820152602660248201527f446f6573206e6f7420616c6c6f772064656372656d656e7473206f6620746865604482015265206e6f6e636560d01b6064820152608401610bdf565b60ff919091166000908152600360205260409020805467ffffffffffffffff19166001600160401b03909216919091179055565b604080516001808252818301909252600091816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161151a579050509050838160008151811061156357611563612323565b6020026020010181905250610a568184846105a9565b6115916000356001600160e01b031916610a74611610565b60005461010090046001600160a01b03166115bf5760405163cca785b960e01b815260040160405180910390fd5b610e056113c2611610565b60005460ff1615610e055760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bdf565b6000336014361080159061163c57506001600160a01b03811660009081526005602052604090205460ff165b1561164c575060131936013560601c5b919050565b600254604051631c72548760e21b81526001600160e01b0319841660048201526001600160a01b038381166024830152909116906371c9521c90604401602060405180830381865afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf919061269c565b6117075760405163039d370b60e01b81526001600160a01b03821660048201526001600160e01b031983166024820152604401610bdf565b5050565b6117136115ca565b6000805460ff191660011790556040516001600160a01b03821681527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610aa8565b60006117a761176661181c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b60008060006117bc8585611943565b915091506117c9816119b3565b509392505050565b6117d9611b71565b6000805460ff191690556040516001600160a01b03821681527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001610aa8565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561187557507f000000000000000000000000000000000000000000000000000000000000000046145b1561189f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041141561197a5760208301516040840151606085015160001a61196e87828585611bba565b945094505050506119ac565b8251604014156119a45760208301516040840151611999868383611ca7565b9350935050506119ac565b506000905060025b9250929050565b60008160048111156119c7576119c76126b9565b14156119d05750565b60018160048111156119e4576119e46126b9565b1415611a325760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bdf565b6002816004811115611a4657611a466126b9565b1415611a945760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bdf565b6003816004811115611aa857611aa86126b9565b1415611b015760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bdf565b6004816004811115611b1557611b156126b9565b1415611b6e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bdf565b50565b60005460ff16610e055760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bdf565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bf15750600090506003611c9e565b8460ff16601b14158015611c0957508460ff16601c14155b15611c1a5750600090506004611c9e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c6e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c9757600060019250925050611c9e565b9150600090505b94509492505050565b6000806001600160ff1b03831681611cc460ff86901c601b6126cf565b9050611cd287828885611bba565b935093505050935093915050565b803560ff8116811461164c57600080fd5b60008060408385031215611d0457600080fd5b611d0d83611ce0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611d5957611d59611d1b565b604052919050565b80356001600160401b038116811461164c57600080fd5b60006001600160401b03821115611d9157611d91611d1b565b50601f01601f191660200190565b6000611db2611dad84611d78565b611d31565b9050828152838383011115611dc657600080fd5b828260208301376000602084830101529392505050565b600082601f830112611dee57600080fd5b611dfd83833560208501611d9f565b9392505050565b600060808284031215611e1657600080fd5b604051608081016001600160401b038282108183111715611e3957611e39611d1b565b81604052829350611e4985611ce0565b8352611e5760208601611d61565b6020840152604085013560408401526060850135915080821115611e7a57600080fd5b50611e8785828601611ddd565b6060830152505092915050565b60008083601f840112611ea657600080fd5b5081356001600160401b03811115611ebd57600080fd5b6020830191508360208285010111156119ac57600080fd5b600080600060408486031215611eea57600080fd5b83356001600160401b0380821115611f0157600080fd5b818601915086601f830112611f1557600080fd5b8135602082821115611f2957611f29611d1b565b8160051b611f38828201611d31565b928352848101820192828101908b851115611f5257600080fd5b83870192505b84831015611f8e57823586811115611f705760008081fd5b611f7e8d86838b0101611e04565b8352509183019190830190611f58565b9850505087013592505080821115611fa557600080fd5b50611fb286828701611e94565b9497909650939450505050565b600060208284031215611fd157600080fd5b81356001600160401b03811115611fe757600080fd5b8201601f81018413611ff857600080fd5b61200784823560208401611d9f565b949350505050565b60006020828403121561202157600080fd5b611dfd82611ce0565b6000806000806000806080878903121561204357600080fd5b61204c87611ce0565b95506020870135945060408701356001600160401b038082111561206f57600080fd5b61207b8a838b01611e94565b9096509450606089013591508082111561209457600080fd5b506120a189828a01611e94565b979a9699509497509295939492505050565b60005b838110156120ce5781810151838201526020016120b6565b83811115610a565750506000910152565b600081518084526120f78160208601602086016120b3565b601f01601f19169290920160200192915050565b6001600160401b038316815260406020820152600061200760408301846120df565b60006020828403121561213f57600080fd5b5035919050565b80356001600160a01b038116811461164c57600080fd5b60008060008060006080868803121561217557600080fd5b61217e86612146565b94506020860135935061219360408701612146565b925060608601356001600160401b038111156121ae57600080fd5b6121ba88828901611e94565b969995985093965092949392505050565b6000602082840312156121dd57600080fd5b611dfd82612146565b600080604083850312156121f957600080fd5b61220283612146565b915061221060208401612146565b90509250929050565b6000806040838503121561222c57600080fd5b61223583612146565b915060208301356001600160401b0381111561225057600080fd5b61225c85828601611ddd565b9150509250929050565b8015158114611b6e57600080fd5b6000806040838503121561228757600080fd5b61229083612146565b915060208301356122a081612266565b809150509250929050565b600080604083850312156122be57600080fd5b6122c783611ce0565b915061221060208401611d61565b6000806000604084860312156122ea57600080fd5b83356001600160401b038082111561230157600080fd5b61230d87838801611e04565b94506020860135915080821115611fa557600080fd5b634e487b7160e01b600052603260045260246000fd5b6bffffffffffffffffffffffff198360601b168152600082516123638160148501602087016120b3565b919091016014019392505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b03808416806123a1576123a1612371565b92169190910692915050565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808416806123dd576123dd612371565b92169190910492915050565b82815260406020820152600061200760408301846120df565b60006020828403121561241457600080fd5b81516001600160401b0381111561242a57600080fd5b8201601f8101841361243b57600080fd5b8051612449611dad82611d78565b81815285602083850101111561245e57600080fd5b61246f8260208301602086016120b3565b95945050505050565b60608152600061248b60608301866120df565b905060ff841660208301526001600160401b0383166040830152949350505050565b60ff851681526001600160401b03841660208201528260408201526080606082015260006124de60808301846120df565b9695505050505050565b60006000198214156124fc576124fc6123ad565b5060010190565b602081526000611dfd60208301846120df565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038916815260ff8816602082015260ff8716604082015285606082015260c06080820152600061257960c083018688612516565b82810360a084015261258c818587612516565b9b9a5050505050505050505050565b60006001600160401b03808316818114156125b8576125b86123ad565b6001019392505050565b8481526001600160a01b03841660208201526060604082018190526000906124de9083018486612516565b60ff871681528560208201526001600160401b038516604082015260a06060820152600061261f60a083018587612516565b828103608084015261263181856120df565b9998505050505050505050565b60008261264d5761264d612371565b500690565b60008261266157612661612371565b500490565b815160009082906020808601845b8381101561269057815185529382019390820190600101612674565b50929695505050505050565b6000602082840312156126ae57600080fd5b8151611dfd81612266565b634e487b7160e01b600052602160045260246000fd5b600082198211156126e2576126e26123ad565b50019056fea26469706673582212200e5ef188eeb255b6811275905c297a9b9be2598c6d02fc6dd4ea4b67b0937bf264736f6c634300080b0033",
  "deployedBytecode": "0x60806040526004361061019c5760003560e01c80638c0c2631116100ec578063d2e5fae91161008a578063f0ead51e11610064578063f0ead51e14610524578063f8c39e4414610544578063fe4648f414610574578063ffaac0eb1461059457600080fd5b8063d2e5fae9146104c4578063d8236744146104e4578063edc20c3c1461050457600080fd5b80639dd694f4116100c65780639dd694f41461041e578063a546e8a114610464578063bd2a182014610484578063d15ef64e146104a457600080fd5b80638c0c2631146103be5780639ae0bf45146103de5780639d33b6d4146103fe57600080fd5b80635c975abb1161015957806380ae1c281161013357806380ae1c281461033357806384db809f146103485780638a3234c71461037e5780638b63aebf1461039e57600080fd5b80635c975abb146102d95780636ba6db6b146102fd57806373c45c981461031257600080fd5b8063059972d2146101a157806308a64104146101e35780631f5c64c114610229578063366b48851461024b57806344e8e4301461026b5780634b0b919d1461028b575b600080fd5b3480156101ad57600080fd5b506000546101c69061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ef57600080fd5b5061021b6101fe366004611cf1565b600660209081526000928352604080842090915290825290205481565b6040519081526020016101da565b34801561023557600080fd5b50610249610244366004611ed5565b6105a9565b005b34801561025757600080fd5b50610249610266366004611fbf565b610a5c565b34801561027757600080fd5b506002546101c6906001600160a01b031681565b34801561029757600080fd5b506102c16102a636600461200f565b6003602052600090815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101da565b3480156102e557600080fd5b5060005460ff165b60405190151581526020016101da565b34801561030957600080fd5b50610249610ab3565b61032561032036600461202a565b610b25565b6040516101da92919061210b565b34801561033f57600080fd5b50610249610ddd565b34801561035457600080fd5b506101c661036336600461212d565b6004602052600090815260409020546001600160a01b031681565b34801561038a57600080fd5b5061024961039936600461215d565b610e07565b3480156103aa57600080fd5b506102496103b93660046121cb565b610eae565b3480156103ca57600080fd5b506102496103d93660046121e6565b610f14565b3480156103ea57600080fd5b506102ed6103f9366004611cf1565b610f90565b34801561040a57600080fd5b506102496104193660046121cb565b610fdf565b34801561042a57600080fd5b506104527f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101da565b34801561047057600080fd5b506102ed61047f366004611ed5565b611045565b34801561049057600080fd5b5061024961049f366004612219565b6112a0565b3480156104b057600080fd5b506102496104bf366004612274565b6112e6565b3480156104d057600080fd5b506102496104df3660046121cb565b611329565b3480156104f057600080fd5b506102496104ff366004611fbf565b6113f3565b34801561051057600080fd5b5061024961051f3660046122ab565b61143a565b34801561053057600080fd5b5061024961053f3660046122d5565b611503565b34801561055057600080fd5b506102ed61055f3660046121cb565b60056020526000908152604090205460ff1681565b34801561058057600080fd5b506001546101c6906001600160a01b031681565b3480156105a057600080fd5b50610249611579565b6105b16115ca565b82516105d0576040516363e60a4960e01b815260040160405180910390fd5b6105db838383611045565b6105f8576040516337077ca360e01b815260040160405180910390fd5b60005b8351811015610a565761065184828151811061061957610619612323565b60200260200101516000015185838151811061063757610637612323565b6020026020010151602001516001600160401b0316610f90565b1561065b57610a44565b60006004600086848151811061067357610673612323565b602002602001015160400151815260200190815260200160002060009054906101000a90046001600160a01b031690506000818684815181106106b8576106b8612323565b6020026020010151606001516040516020016106d5929190612339565b604051602081830303815290604052805190602001209050600082905061010087858151811061070757610707612323565b60200260200101516020015161071d9190612387565b6001600160401b03166001901b6006600089878151811061074057610740612323565b60200260200101516000015160ff1660ff16815260200190815260200160002060006101008a888151811061077757610777612323565b60200260200101516020015161078d91906123c3565b6001600160401b0316815260200190815260200160002060008282541792505081905550806001600160a01b031663e248cff28886815181106107d2576107d2612323565b6020026020010151604001518987815181106107f0576107f0612323565b6020026020010151606001516040518363ffffffff1660e01b81526004016108199291906123e9565b6000604051808303816000875af192505050801561085957506040513d6000823e601f3d908101601f191682016040526108569190810190612402565b60015b6109c8573d808015610887576040519150601f19603f3d011682016040523d82523d6000602084013e61088c565b606091505b507f19f774a63ee465292252a9981ae52051acc13da671c698ac4b5bf25b38c5b6fc818987815181106108c1576108c1612323565b6020026020010151600001518a88815181106108df576108df612323565b6020026020010151602001516040516108fa93929190612478565b60405180910390a161010088868151811061091757610917612323565b60200260200101516020015161092d9190612387565b6001600160401b03166001901b19600660008a888151811061095157610951612323565b60200260200101516000015160ff1660ff16815260200190815260200160002060006101008b898151811061098857610988612323565b60200260200101516020015161099e91906123c3565b6001600160401b0316815260208101919091526040016000208054909116905550610a4492505050565b7fb83128682faafdf78efbb57c4c9acdc12ba648a50eca00b8b72818ea2d8e5cf98886815181106109fb576109fb612323565b602002602001015160000151898781518110610a1957610a19612323565b6020026020010151602001518584604051610a3794939291906124ad565b60405180910390a1505050505b80610a4e816124e8565b9150506105fb565b50505050565b610a796000356001600160e01b031916610a74611610565b611651565b7f9069464c059b9a90135a3fdf2c47855263346b912894ad7562d989532c3fad4c81604051610aa89190612503565b60405180910390a150565b610acb6000356001600160e01b031916610a74611610565b60005461010090046001600160a01b031615610afa5760405163229924e160e01b815260040160405180910390fd5b6040517f24e723a5c27b62883404028b8dee9965934de6a46828cda2ff63bf9a5e65ce4390600090a1565b60006060610b316115ca565b7f000000000000000000000000000000000000000000000000000000000000000060ff168860ff161415610b7857604051630137058b60e61b815260040160405180910390fd5b6000610b82611610565b6001549091506001600160a01b0316610bed573415610be85760405162461bcd60e51b815260206004820152601d60248201527f6e6f2046656548616e646c65722c206d73672e76616c756520213d203000000060448201526064015b60405180910390fd5b610c80565b600154604051632530706560e01b81526001600160a01b03909116906325307065903490610c4d9085907f0000000000000000000000000000000000000000000000000000000000000000908f908f908f908f908f908f9060040161253f565b6000604051808303818588803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505b6000888152600460205260409020546001600160a01b031680610cb6576040516308c231dd60e31b815260040160405180910390fd5b60ff8a1660009081526003602052604081208054909190610cdf906001600160401b031661259b565b91906101000a8154816001600160401b0302191690836001600160401b03160217905593506000819050806001600160a01b031663b07e54bb8b858c8c6040518563ffffffff1660e01b8152600401610d3b94939291906125c2565b6000604051808303816000875af1158015610d5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d829190810190612402565b9350826001600160a01b03167f17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f8c8c888d8d8a604051610dc7969594939291906125ed565b60405180910390a2505050965096945050505050565b610df56000356001600160e01b031916610a74611610565b610e05610e00611610565b61170b565b565b610e1f6000356001600160e01b031916610a74611610565b60008481526004602081905260409182902080546001600160a01b0319166001600160a01b0389169081179091559151630fa8675b60e41b815287929163fa8675b091610e74918991899189918991016125c2565b600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b50505050505050505050565b610ec66000356001600160e01b031916610a74611610565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f729170bd142e4965055b26a285faeedf03baf2b915bfc5a7c75d24b45815ff2c90602001610aa8565b610f2c6000356001600160e01b031916610a74611610565b6040516307b7ed9960e01b81526001600160a01b0382811660048301528391908216906307b7ed99906024015b600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b50505050505050565b6000610f9e6101008361263e565b60ff84166000908152600660205260408120600190921b9190610fc361010086612652565b8152602001908152602001600020541660001415905092915050565b610ff76000356001600160e01b031916610a74611610565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f497acaa34ac19c2a2a579ad43eca493b4fea820459e254e9383e7dda216b0f0490602001610aa8565b60008084516001600160401b0381111561106157611061611d1b565b60405190808252806020026020018201604052801561108a578160200160208202803683370190505b50905060005b85518110156111bc577fcc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a708682815181106110cc576110cc612323565b6020026020010151600001518783815181106110ea576110ea612323565b60200260200101516020015188848151811061110857611108612323565b60200260200101516040015189858151811061112657611126612323565b6020026020010151606001518051906020012060405160200161117795949392919094855260ff9390931660208501526001600160401b039190911660408401526060830152608082015260a00190565b6040516020818303038152906040528051906020012082828151811061119f5761119f612323565b6020908102919091010152806111b4816124e8565b915050611090565b50600061128085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405161127a92507f989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5915061122f908790602001612666565b6040516020818303038152906040528051906020012060405160200161125f929190918252602082015260400190565b60405160208183030381529060405280519060200120611759565b906117ad565b60005461010090046001600160a01b039081169116149695505050505050565b6112b86000356001600160e01b031916610a74611610565b60405163025a3c9960e21b815282906001600160a01b03821690630968f26490610f59908590600401612503565b6112fe6000356001600160e01b031916610a74611610565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6113416000356001600160e01b031916610a74611610565b6001600160a01b03811661136857604051631449e68f60e01b815260040160405180910390fd5b60005461010090046001600160a01b03161561139757604051632748fb3360e21b815260040160405180910390fd5b60008054610100600160a81b0319166101006001600160a01b038416021790556113c76113c2611610565b6117d1565b6040517f4187686ceef7b541a1f224d48d4cded8f2c535e0e58ac0f0514071b1de3dad5790600090a150565b61140b6000356001600160e01b031916610a74611610565b7fe78d813a9260522f81d6c761e311727b2e19008daadd2b9e174be86bc4f06a4b81604051610aa89190612503565b6114526000356001600160e01b031916610a74611610565b60ff82166000908152600360205260409020546001600160401b03908116908216116114cf5760405162461bcd60e51b815260206004820152602660248201527f446f6573206e6f7420616c6c6f772064656372656d656e7473206f6620746865604482015265206e6f6e636560d01b6064820152608401610bdf565b60ff919091166000908152600360205260409020805467ffffffffffffffff19166001600160401b03909216919091179055565b604080516001808252818301909252600091816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161151a579050509050838160008151811061156357611563612323565b6020026020010181905250610a568184846105a9565b6115916000356001600160e01b031916610a74611610565b60005461010090046001600160a01b03166115bf5760405163cca785b960e01b815260040160405180910390fd5b610e056113c2611610565b60005460ff1615610e055760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bdf565b6000336014361080159061163c57506001600160a01b03811660009081526005602052604090205460ff165b1561164c575060131936013560601c5b919050565b600254604051631c72548760e21b81526001600160e01b0319841660048201526001600160a01b038381166024830152909116906371c9521c90604401602060405180830381865afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf919061269c565b6117075760405163039d370b60e01b81526001600160a01b03821660048201526001600160e01b031983166024820152604401610bdf565b5050565b6117136115ca565b6000805460ff191660011790556040516001600160a01b03821681527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610aa8565b60006117a761176661181c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b60008060006117bc8585611943565b915091506117c9816119b3565b509392505050565b6117d9611b71565b6000805460ff191690556040516001600160a01b03821681527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001610aa8565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561187557507f000000000000000000000000000000000000000000000000000000000000000046145b1561189f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041141561197a5760208301516040840151606085015160001a61196e87828585611bba565b945094505050506119ac565b8251604014156119a45760208301516040840151611999868383611ca7565b9350935050506119ac565b506000905060025b9250929050565b60008160048111156119c7576119c76126b9565b14156119d05750565b60018160048111156119e4576119e46126b9565b1415611a325760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bdf565b6002816004811115611a4657611a466126b9565b1415611a945760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bdf565b6003816004811115611aa857611aa86126b9565b1415611b015760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bdf565b6004816004811115611b1557611b156126b9565b1415611b6e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bdf565b50565b60005460ff16610e055760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bdf565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bf15750600090506003611c9e565b8460ff16601b14158015611c0957508460ff16601c14155b15611c1a5750600090506004611c9e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c6e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c9757600060019250925050611c9e565b9150600090505b94509492505050565b6000806001600160ff1b03831681611cc460ff86901c601b6126cf565b9050611cd287828885611bba565b935093505050935093915050565b803560ff8116811461164c57600080fd5b60008060408385031215611d0457600080fd5b611d0d83611ce0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611d5957611d59611d1b565b604052919050565b80356001600160401b038116811461164c57600080fd5b60006001600160401b03821115611d9157611d91611d1b565b50601f01601f191660200190565b6000611db2611dad84611d78565b611d31565b9050828152838383011115611dc657600080fd5b828260208301376000602084830101529392505050565b600082601f830112611dee57600080fd5b611dfd83833560208501611d9f565b9392505050565b600060808284031215611e1657600080fd5b604051608081016001600160401b038282108183111715611e3957611e39611d1b565b81604052829350611e4985611ce0565b8352611e5760208601611d61565b6020840152604085013560408401526060850135915080821115611e7a57600080fd5b50611e8785828601611ddd565b6060830152505092915050565b60008083601f840112611ea657600080fd5b5081356001600160401b03811115611ebd57600080fd5b6020830191508360208285010111156119ac57600080fd5b600080600060408486031215611eea57600080fd5b83356001600160401b0380821115611f0157600080fd5b818601915086601f830112611f1557600080fd5b8135602082821115611f2957611f29611d1b565b8160051b611f38828201611d31565b928352848101820192828101908b851115611f5257600080fd5b83870192505b84831015611f8e57823586811115611f705760008081fd5b611f7e8d86838b0101611e04565b8352509183019190830190611f58565b9850505087013592505080821115611fa557600080fd5b50611fb286828701611e94565b9497909650939450505050565b600060208284031215611fd157600080fd5b81356001600160401b03811115611fe757600080fd5b8201601f81018413611ff857600080fd5b61200784823560208401611d9f565b949350505050565b60006020828403121561202157600080fd5b611dfd82611ce0565b6000806000806000806080878903121561204357600080fd5b61204c87611ce0565b95506020870135945060408701356001600160401b038082111561206f57600080fd5b61207b8a838b01611e94565b9096509450606089013591508082111561209457600080fd5b506120a189828a01611e94565b979a9699509497509295939492505050565b60005b838110156120ce5781810151838201526020016120b6565b83811115610a565750506000910152565b600081518084526120f78160208601602086016120b3565b601f01601f19169290920160200192915050565b6001600160401b038316815260406020820152600061200760408301846120df565b60006020828403121561213f57600080fd5b5035919050565b80356001600160a01b038116811461164c57600080fd5b60008060008060006080868803121561217557600080fd5b61217e86612146565b94506020860135935061219360408701612146565b925060608601356001600160401b038111156121ae57600080fd5b6121ba88828901611e94565b969995985093965092949392505050565b6000602082840312156121dd57600080fd5b611dfd82612146565b600080604083850312156121f957600080fd5b61220283612146565b915061221060208401612146565b90509250929050565b6000806040838503121561222c57600080fd5b61223583612146565b915060208301356001600160401b0381111561225057600080fd5b61225c85828601611ddd565b9150509250929050565b8015158114611b6e57600080fd5b6000806040838503121561228757600080fd5b61229083612146565b915060208301356122a081612266565b809150509250929050565b600080604083850312156122be57600080fd5b6122c783611ce0565b915061221060208401611d61565b6000806000604084860312156122ea57600080fd5b83356001600160401b038082111561230157600080fd5b61230d87838801611e04565b94506020860135915080821115611fa557600080fd5b634e487b7160e01b600052603260045260246000fd5b6bffffffffffffffffffffffff198360601b168152600082516123638160148501602087016120b3565b919091016014019392505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b03808416806123a1576123a1612371565b92169190910692915050565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808416806123dd576123dd612371565b92169190910492915050565b82815260406020820152600061200760408301846120df565b60006020828403121561241457600080fd5b81516001600160401b0381111561242a57600080fd5b8201601f8101841361243b57600080fd5b8051612449611dad82611d78565b81815285602083850101111561245e57600080fd5b61246f8260208301602086016120b3565b95945050505050565b60608152600061248b60608301866120df565b905060ff841660208301526001600160401b0383166040830152949350505050565b60ff851681526001600160401b03841660208201528260408201526080606082015260006124de60808301846120df565b9695505050505050565b60006000198214156124fc576124fc6123ad565b5060010190565b602081526000611dfd60208301846120df565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038916815260ff8816602082015260ff8716604082015285606082015260c06080820152600061257960c083018688612516565b82810360a084015261258c818587612516565b9b9a5050505050505050505050565b60006001600160401b03808316818114156125b8576125b86123ad565b6001019392505050565b8481526001600160a01b03841660208201526060604082018190526000906124de9083018486612516565b60ff871681528560208201526001600160401b038516604082015260a06060820152600061261f60a083018587612516565b828103608084015261263181856120df565b9998505050505050505050565b60008261264d5761264d612371565b500690565b60008261266157612661612371565b500490565b815160009082906020808601845b8381101561269057815185529382019390820190600101612674565b50929695505050505050565b6000602082840312156126ae57600080fd5b8151611dfd81612266565b634e487b7160e01b600052602160045260246000fd5b600082198211156126e2576126e26123ad565b50019056fea26469706673582212200e5ef188eeb255b6811275905c297a9b9be2598c6d02fc6dd4ea4b67b0937bf264736f6c634300080b0033",
  "immutableReferences": {
    "5995": [
      {
        "length": 32,
        "start": 6269
      }
    ],
    "5997": [
      {
        "length": 32,
        "start": 6227
      }
    ],
    "5999": [
      {
        "length": 32,
        "start": 6185
      }
    ],
    "6001": [
      {
        "length": 32,
        "start": 6352
      }
    ],
    "6003": [
      {
        "length": 32,
        "start": 6389
      }
    ],
    "6005": [
      {
        "length": 32,
        "start": 6310
      }
    ],
    "7930": [
      {
        "length": 32,
        "start": 1072
      },
      {
        "length": 32,
        "start": 2867
      },
      {
        "length": 32,
        "start": 3097
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:1511:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "110:352:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "156:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "165:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "168:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "158:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "158:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "158:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "131:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "140:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "127:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "127:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "152:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "123:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "123:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "120:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "181:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "200:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "194:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "194:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "185:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "258:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "267:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "270:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "260:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "260:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "260:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "232:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "243:5:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "250:4:105",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "239:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "239:16:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "229:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "229:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "222:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "222:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "219:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "283:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "293:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "283:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "307:40:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "332:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "343:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "328:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "328:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "322:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "322:25:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "311:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "414:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "423:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "426:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "416:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "416:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "416:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_1",
                            "nodeType": "YulIdentifier",
                            "src": "369:7:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "382:7:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "399:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "404:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "395:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "395:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "408:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "391:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "391:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "378:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "378:33:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "366:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "366:46:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "359:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "359:54:105"
                  },
                  "nodeType": "YulIf",
                  "src": "356:74:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "439:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "449:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "439:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "68:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "79:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "91:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "99:6:105",
                "type": ""
              }
            ],
            "src": "14:448:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "680:276:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "690:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "702:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "713:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "698:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "698:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "690:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "733:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "744:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "726:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "726:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "726:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "771:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "782:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "767:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "767:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "787:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "760:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "760:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "760:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "814:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "825:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "810:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "810:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "830:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "803:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "803:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "803:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "857:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "868:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "853:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "853:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "873:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "846:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "846:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "846:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "900:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "911:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "896:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "896:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "921:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "937:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "942:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "933:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "933:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "946:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "929:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "929:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "917:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "917:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:61:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "617:9:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "628:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "636:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "644:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "652:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "660:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "671:4:105",
                "type": ""
              }
            ],
            "src": "467:489:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1062:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1072:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1084:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1095:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1080:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1080:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1072:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1114:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1129:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1145:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1150:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1141:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1141:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1154:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1137:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1137:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1125:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1125:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1107:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1107:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1107:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1031:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1042:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1053:4:105",
                "type": ""
              }
            ],
            "src": "961:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1343:166:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1360:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1371:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1353:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1353:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1353:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1394:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1405:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1390:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1390:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1410:2:105",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1383:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1383:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1383:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1433:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1444:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1429:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1429:18:105"
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1449:18:105",
                        "type": "",
                        "value": "Pausable: paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1422:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1422:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1422:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1477:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1489:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1500:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1485:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1485:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1477:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1320:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1334:4:105",
                "type": ""
              }
            ],
            "src": "1169:340:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_uint8t_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, and(value_1, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:24195:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "115:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "125:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "148:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "182:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "198:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "203:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "207:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "190:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "190:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "178:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "178:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "160:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "160:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "84:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "95:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "106:4:105",
                "type": ""
              }
            ],
            "src": "14:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "269:109:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "279:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "301:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "288:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "288:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "279:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "356:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "365:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "368:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "358:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "358:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "358:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "330:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "341:5:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "348:4:105",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "337:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "337:16:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "327:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "327:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "320:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "320:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "317:55:105"
                }
              ]
            },
            "name": "abi_decode_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "248:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "259:5:105",
                "type": ""
              }
            ],
            "src": "222:156:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "468:165:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "514:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "523:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "526:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "516:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "516:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "516:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "489:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "498:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "485:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "485:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "510:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "481:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "481:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "478:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "539:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "566:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "549:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "549:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "539:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "585:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "612:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "623:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "608:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "608:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "595:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "595:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "585:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "426:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "437:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "449:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "457:6:105",
                "type": ""
              }
            ],
            "src": "383:250:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "739:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "749:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "761:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "772:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "757:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "757:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "749:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "791:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "802:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "784:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "784:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "784:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "708:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "719:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "730:4:105",
                "type": ""
              }
            ],
            "src": "638:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "852:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "869:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "876:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "881:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "872:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "872:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "862:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "862:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "862:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "909:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "912:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "902:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "902:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "902:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "933:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "936:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "926:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "926:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "926:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "820:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "997:230:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1007:19:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1023:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1017:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1017:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "1007:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1035:58:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1057:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nodeType": "YulIdentifier",
                                "src": "1073:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1079:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1069:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1069:13:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1088:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "1084:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1084:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1065:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1065:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1053:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1053:40:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "1039:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1168:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1170:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1170:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1170:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1111:10:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1123:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1108:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1108:34:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1147:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1159:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1144:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1144:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1105:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1105:62:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1102:88:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1206:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1210:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1199:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1199:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1199:22:105"
                }
              ]
            },
            "name": "allocate_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "977:4:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "986:6:105",
                "type": ""
              }
            ],
            "src": "952:275:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1280:123:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1290:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1312:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1299:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1299:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1290:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1381:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1390:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1393:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1383:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1383:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1383:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1341:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1352:5:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1359:18:105",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1348:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1348:30:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "1338:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1338:41:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1331:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1331:49:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1328:69:105"
                }
              ]
            },
            "name": "abi_decode_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1259:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1270:5:105",
                "type": ""
              }
            ],
            "src": "1232:171:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1465:129:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1509:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1511:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1511:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1511:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1481:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1489:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1478:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1478:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1475:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1540:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1560:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1568:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1556:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1556:15:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1577:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "1573:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1573:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1552:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1552:29:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1583:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1548:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1548:40:105"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "1540:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1445:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "1456:4:105",
                "type": ""
              }
            ],
            "src": "1408:186:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1673:262:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1683:61:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1736:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "1708:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1708:35:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1692:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1692:52:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "1683:5:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "1760:5:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1767:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1753:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1753:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1753:21:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1812:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1821:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1824:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1814:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1814:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1814:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "1793:3:105"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1798:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1789:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1789:16:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "1807:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1786:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1786:25:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1783:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nodeType": "YulIdentifier",
                            "src": "1854:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1861:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1850:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1850:16:105"
                      },
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "1868:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1873:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "1837:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1837:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1837:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "1904:5:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1911:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1900:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1900:18:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1920:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1896:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1896:29:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1927:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1889:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1889:40:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1889:40:105"
                }
              ]
            },
            "name": "abi_decode_available_length_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "1642:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1647:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1655:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "1663:5:105",
                "type": ""
              }
            ],
            "src": "1599:336:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1992:168:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2041:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2050:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2053:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2043:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2043:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2043:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2020:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2028:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2016:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2016:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2035:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2012:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2012:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2005:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2005:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2002:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2066:88:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2113:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2121:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2109:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2109:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2141:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "2128:12:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2128:20:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "2150:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "2075:33:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2075:79:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "2066:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1966:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1974:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "1982:5:105",
                "type": ""
              }
            ],
            "src": "1940:220:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2230:681:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2274:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2283:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2286:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2276:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2276:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2276:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2251:3:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2256:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2247:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2247:19:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2268:4:105",
                        "type": "",
                        "value": "0x80"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2243:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2243:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2240:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2299:23:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2319:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2313:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2313:9:105"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "2303:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2331:35:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "2353:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2361:4:105",
                        "type": "",
                        "value": "0x80"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2349:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2349:17:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "2335:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2375:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2385:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2379:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2462:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "2464:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2464:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2464:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "2421:10:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "2433:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "2418:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2418:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "2441:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "2453:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "2438:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2438:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "2415:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2415:46:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2412:72:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2500:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "2504:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2493:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2493:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2493:22:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2524:15:105",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "2533:6:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2524:5:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "2555:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2580:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "2563:16:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2563:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2548:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2548:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2548:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "2611:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2619:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2607:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2607:15:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2646:9:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2657:2:105",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2642:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2642:18:105"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_uint64",
                          "nodeType": "YulIdentifier",
                          "src": "2624:17:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2624:37:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2600:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2600:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2600:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "2682:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2690:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2678:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2678:15:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2712:9:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2723:2:105",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2708:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2708:18:105"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "2695:12:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2695:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2671:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2671:57:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2671:57:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2737:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2768:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2779:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2764:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2764:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2751:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2751:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "2741:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2810:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2819:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2822:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2812:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2812:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2812:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2798:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2806:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2795:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2795:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2792:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "2846:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2854:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2842:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2842:15:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2880:9:105"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2891:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2876:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2876:22:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2900:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "2859:16:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2859:45:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2835:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2835:70:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2835:70:105"
                }
              ]
            },
            "name": "abi_decode_struct_Proposal",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2201:9:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2212:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2220:5:105",
                "type": ""
              }
            ],
            "src": "2165:746:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2988:275:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3037:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3046:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3049:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3039:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3039:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3039:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3016:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3024:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3012:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3012:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "3031:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "3008:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3008:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3001:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3001:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2998:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3062:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3085:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3072:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3072:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "3062:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3135:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3144:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3147:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3137:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3137:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3137:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3107:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3115:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3104:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3104:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3101:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3160:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3176:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3184:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3172:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3172:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "3160:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3241:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3250:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3253:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3243:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3243:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3243:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3212:6:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "3220:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3208:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3208:19:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3229:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3204:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3204:30:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "3236:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3201:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3201:39:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3198:59:105"
                }
              ]
            },
            "name": "abi_decode_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2951:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2959:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "2967:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "2977:6:105",
                "type": ""
              }
            ],
            "src": "2916:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3425:1324:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3471:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3480:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3483:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3473:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3473:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3473:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3446:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3455:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3442:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3442:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3467:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3438:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3438:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3435:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3496:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3523:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3510:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3510:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3500:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3542:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3552:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3546:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3597:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3606:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3609:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3599:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3599:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3599:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3585:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3593:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3582:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3582:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3579:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3622:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3636:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3647:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3632:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3632:22:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "3626:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3702:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3711:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3714:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3704:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3704:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3704:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "3681:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3685:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3677:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3677:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3692:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "3673:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3673:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3666:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3666:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3663:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3727:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "3750:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3737:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3737:16:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "3731:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3762:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3772:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "3766:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3799:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "3801:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3801:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3801:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "3791:2:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3795:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3788:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3788:10:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3785:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3830:20:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3844:1:105",
                        "type": "",
                        "value": "5"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "3847:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "3840:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3840:10:105"
                  },
                  "variables": [
                    {
                      "name": "_5",
                      "nodeType": "YulTypedName",
                      "src": "3834:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3859:39:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "3890:2:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "3894:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3886:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3886:11:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "3870:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3870:28:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "3863:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3907:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "3920:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "3911:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "3939:3:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "3944:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3932:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3932:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3932:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3956:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "3967:3:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "3972:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3963:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3963:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "3956:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3984:34:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "4006:2:105"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "4010:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4002:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4002:11:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "4015:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3998:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3998:20:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "3988:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4050:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4059:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4062:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4052:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4052:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4052:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4033:6:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4041:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4030:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4030:19:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4027:39:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4075:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "4090:2:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "4094:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4086:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4086:11:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "4079:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4162:306:105",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4176:36:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "4208:3:105"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "4195:12:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4195:17:105"
                        },
                        "variables": [
                          {
                            "name": "innerOffset",
                            "nodeType": "YulTypedName",
                            "src": "4180:11:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4260:74:105",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4278:11:105",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4288:1:105",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "_6",
                                  "nodeType": "YulTypedName",
                                  "src": "4282:2:105",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "4313:2:105"
                                  },
                                  {
                                    "name": "_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "4317:2:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "4306:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4306:14:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4306:14:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "innerOffset",
                              "nodeType": "YulIdentifier",
                              "src": "4231:11:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "4244:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "4228:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4228:19:105"
                        },
                        "nodeType": "YulIf",
                        "src": "4225:109:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "4354:3:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4394:2:105"
                                        },
                                        {
                                          "name": "innerOffset",
                                          "nodeType": "YulIdentifier",
                                          "src": "4398:11:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4390:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4390:20:105"
                                    },
                                    {
                                      "name": "_4",
                                      "nodeType": "YulIdentifier",
                                      "src": "4412:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "4386:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "4386:29:105"
                                },
                                {
                                  "name": "dataEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "4417:7:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_struct_Proposal",
                                "nodeType": "YulIdentifier",
                                "src": "4359:26:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4359:66:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4347:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4347:79:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4347:79:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "4439:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "4450:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "4455:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "4446:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4446:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "4439:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "4117:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4122:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "4114:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4114:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "4130:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "4132:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "4143:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "4148:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "4139:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4139:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "4132:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "4110:3:105",
                    "statements": []
                  },
                  "src": "4106:362:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4477:15:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "4487:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4477:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4501:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4534:9:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "4545:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4530:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4530:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4517:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4517:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "4505:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4578:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4587:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4590:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4580:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4580:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4580:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "4564:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4574:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4561:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4561:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4558:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4603:86:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4659:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "4670:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4655:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4655:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4681:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4629:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4629:60:105"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "4607:8:105",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "4617:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4698:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4708:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4698:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4725:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "4735:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4725:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptrt_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3375:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3386:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3398:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3406:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3414:6:105",
                "type": ""
              }
            ],
            "src": "3268:1481:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4834:370:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4880:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4889:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4892:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4882:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4882:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4882:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4855:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4864:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4851:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4851:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4876:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4847:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4847:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4844:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4905:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4932:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4919:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4919:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4909:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4985:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4994:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4997:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4987:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4987:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4987:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4957:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4965:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4954:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4954:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4951:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5010:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5024:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5035:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5020:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5020:22:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5014:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5090:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5099:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5102:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5092:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5092:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5092:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "5069:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5073:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5065:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5065:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5080:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "5061:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5061:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "5054:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5054:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5051:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5115:83:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5163:2:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5167:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5159:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5159:11:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5185:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "5172:12:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5172:16:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5190:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "5125:33:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5125:73:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5115:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4800:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4811:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4823:6:105",
                "type": ""
              }
            ],
            "src": "4754:450:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5344:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5354:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5366:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5377:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5362:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5362:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5354:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5396:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5411:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5427:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5432:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5423:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5423:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5436:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5419:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5419:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5407:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5407:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5389:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5389:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5389:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IAccessControlSegregator_$18093__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5313:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5324:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5335:4:105",
                "type": ""
              }
            ],
            "src": "5209:237:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5519:114:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5565:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5574:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5577:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5567:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5567:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5567:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5540:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5549:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5536:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5536:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5561:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5532:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5532:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5529:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5590:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5617:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "5600:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5600:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5590:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5485:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5496:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5508:6:105",
                "type": ""
              }
            ],
            "src": "5451:182:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5737:101:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5747:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5759:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5770:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5755:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5755:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5747:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5789:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5804:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5812:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5800:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5800:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5782:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5782:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5782:50:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5706:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5717:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5728:4:105",
                "type": ""
              }
            ],
            "src": "5638:200:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5938:92:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5948:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5960:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5971:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5956:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5956:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5948:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5990:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "6015:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "6008:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6008:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "6001:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6001:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5983:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5983:41:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5983:41:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5907:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5918:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5929:4:105",
                "type": ""
              }
            ],
            "src": "5843:187:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6192:699:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6239:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6248:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6251:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6241:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6241:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6241:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6213:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6222:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6209:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6209:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6234:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6205:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6205:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6202:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6264:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6291:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "6274:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6274:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6264:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6310:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6337:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6348:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6333:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6333:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6320:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6320:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6310:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6361:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6392:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6403:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6388:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6388:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6375:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6375:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6365:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6416:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6426:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6420:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6471:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6480:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6483:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6473:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6473:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6473:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6459:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6467:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6456:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6456:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6453:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6496:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6552:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6563:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6548:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6548:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6572:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6522:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6522:58:105"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "6500:8:105",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "6510:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6589:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "6599:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6589:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6616:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "6626:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "6616:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6643:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6676:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6687:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6672:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6672:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6659:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6659:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "6647:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6720:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6729:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6732:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6722:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6722:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6722:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "6706:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6716:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6703:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6703:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6700:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6745:86:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6801:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "6812:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6797:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6797:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6823:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6771:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6771:60:105"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "6749:8:105",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "6759:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6840:18:105",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "6850:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "6840:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6867:18:105",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "6877:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "6867:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_bytes32t_bytes_calldata_ptrt_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6118:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6129:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6141:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6149:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6157:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6165:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6173:6:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "6181:6:105",
                "type": ""
              }
            ],
            "src": "6035:856:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6949:205:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6959:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6968:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "6963:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7028:63:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "7053:3:105"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "7058:1:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "7049:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7049:11:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "7072:3:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "7077:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7068:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7068:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "7062:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7062:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "7042:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7042:39:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7042:39:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "6989:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6992:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "6986:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6986:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "7000:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7002:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "7011:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7014:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "7007:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7007:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "7002:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "6982:3:105",
                    "statements": []
                  },
                  "src": "6978:113:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7117:31:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "7130:3:105"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "7135:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "7126:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7126:16:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7144:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "7119:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7119:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7119:27:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "7106:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "7109:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7103:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7103:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7100:48:105"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "6927:3:105",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "6932:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "6937:6:105",
                "type": ""
              }
            ],
            "src": "6896:258:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7208:208:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7218:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7238:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "7232:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7232:12:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "7222:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7260:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "7265:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7253:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7253:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7253:19:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "7307:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7314:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7303:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7303:16:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "7325:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7330:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7321:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7321:14:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "7337:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "7281:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7281:63:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7281:63:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7353:57:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "7368:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7381:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7389:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7377:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7377:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7398:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "7394:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7394:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "7373:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7373:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7364:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7364:39:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7405:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7360:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7360:50:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "7353:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7185:5:105",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "7192:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7200:3:105",
                "type": ""
              }
            ],
            "src": "7159:257:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7566:166:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7583:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7598:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7606:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7594:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7594:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7576:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7576:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7576:50:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7646:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7657:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7642:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7642:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7662:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7635:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7635:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7635:30:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7674:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "7699:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7711:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7722:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7707:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7707:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "7682:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7682:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7674:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint64_t_bytes_memory_ptr__to_t_uint64_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7527:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7538:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7546:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7557:4:105",
                "type": ""
              }
            ],
            "src": "7421:311:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7807:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7853:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7862:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7865:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7855:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7855:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7855:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7828:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7837:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7824:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7824:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7849:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7820:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7820:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7817:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7878:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7901:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7888:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7888:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7878:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7773:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7784:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7796:6:105",
                "type": ""
              }
            ],
            "src": "7737:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7971:124:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7981:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8003:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7990:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7990:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "7981:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8073:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8082:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8085:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8075:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8075:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8075:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "8032:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "8043:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8058:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8063:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8054:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8054:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8067:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8050:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8050:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "8039:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8039:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "8029:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8029:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8022:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8022:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8019:70:105"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "7950:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7961:5:105",
                "type": ""
              }
            ],
            "src": "7922:173:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8240:486:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8287:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8296:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8299:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8289:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8289:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8289:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8261:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8270:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8257:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8257:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8282:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8253:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8253:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8250:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8312:39:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8341:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "8322:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8322:29:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8312:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8360:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8387:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8398:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8383:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8383:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8370:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8370:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "8360:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8411:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8444:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8455:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8440:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8440:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "8421:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8421:38:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "8411:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8468:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8499:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8510:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8495:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8495:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8482:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8482:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "8472:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8557:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8566:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8569:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8559:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8559:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8559:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8529:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8537:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8526:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8526:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8523:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8582:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8638:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "8649:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8634:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8634:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8658:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "8608:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8608:58:105"
                  },
                  "variables": [
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "8586:8:105",
                      "type": ""
                    },
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "8596:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8675:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "8685:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "8675:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8702:18:105",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "8712:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "8702:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes32t_addresst_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8174:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8185:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8197:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8205:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8213:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8221:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "8229:6:105",
                "type": ""
              }
            ],
            "src": "8100:626:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8801:116:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8847:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8856:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8859:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8849:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8849:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8849:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8822:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8831:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8818:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8818:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8843:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8814:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8814:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8811:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8872:39:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8901:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "8882:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8882:29:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8872:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8767:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8778:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8790:6:105",
                "type": ""
              }
            ],
            "src": "8731:186:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9009:173:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9055:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9064:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9067:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9057:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9057:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9057:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9030:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9039:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9026:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9026:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9051:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9022:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9022:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9019:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9080:39:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9109:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "9090:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9090:29:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9080:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9128:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9161:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9172:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9157:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9157:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "9138:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9138:38:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9128:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8967:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8978:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8990:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8998:6:105",
                "type": ""
              }
            ],
            "src": "8922:260:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9284:87:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9294:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9306:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9317:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9302:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9302:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9294:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9336:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9351:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9359:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9347:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9347:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9329:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9329:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9329:36:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9253:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9264:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9275:4:105",
                "type": ""
              }
            ],
            "src": "9187:184:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9472:298:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9518:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9527:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9530:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9520:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9520:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9520:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9493:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9502:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9489:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9489:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9514:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9485:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9485:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9482:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9543:39:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9572:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "9553:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9553:29:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9543:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9591:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9622:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9633:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9618:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9618:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9605:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9605:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "9595:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9680:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9689:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9692:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9682:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9682:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9682:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "9652:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9660:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "9649:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9649:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9646:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9705:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9736:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "9747:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9732:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9732:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "9756:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "9715:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9715:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9705:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9430:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9441:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9453:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9461:6:105",
                "type": ""
              }
            ],
            "src": "9376:394:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9817:76:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9871:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9880:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9883:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9873:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9873:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9873:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9840:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9861:5:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9854:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9854:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "9847:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9847:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9837:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9837:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9830:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9830:40:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9827:60:105"
                }
              ]
            },
            "name": "validator_revert_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "9806:5:105",
                "type": ""
              }
            ],
            "src": "9775:118:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9982:231:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10028:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10037:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10040:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10030:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10030:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10030:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "10003:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10012:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9999:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9999:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10024:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9995:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9995:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9992:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10053:39:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10082:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "10063:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10063:29:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "10053:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10101:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10131:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10142:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10127:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10127:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "10114:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10114:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "10105:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "10177:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "10155:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10155:28:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10155:28:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10192:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "10202:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "10192:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9940:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9951:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9963:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9971:6:105",
                "type": ""
              }
            ],
            "src": "9898:315:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10302:170:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10348:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10357:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10360:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10350:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10350:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10350:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "10323:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10332:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "10319:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10319:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10344:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "10315:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10315:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10312:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10373:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10400:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "10383:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10383:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "10373:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10419:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10451:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10462:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10447:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10447:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint64",
                      "nodeType": "YulIdentifier",
                      "src": "10429:17:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10429:37:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "10419:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10260:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "10271:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10283:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10291:6:105",
                "type": ""
              }
            ],
            "src": "10218:254:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10609:523:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10655:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10664:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10667:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10657:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10657:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10657:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "10630:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10639:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "10626:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10626:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10651:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "10622:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10622:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10619:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10680:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10707:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "10694:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10694:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "10684:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10726:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "10736:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "10730:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10781:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10790:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10793:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10783:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10783:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10783:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "10769:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "10777:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10766:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10766:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10763:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10806:69:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10847:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "10858:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10843:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10843:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "10867:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_struct_Proposal",
                      "nodeType": "YulIdentifier",
                      "src": "10816:26:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10816:59:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "10806:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10884:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10917:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10928:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10913:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10913:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "10900:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10900:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "10888:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10961:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10970:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10973:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10963:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10963:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10963:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "10947:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "10957:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10944:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10944:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10941:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10986:86:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11042:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "11053:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11038:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11038:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "11064:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "11012:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11012:60:105"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "10990:8:105",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "11000:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11081:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "11091:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "11081:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11108:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "11118:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "11108:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_struct$_Proposal_$7947_memory_ptrt_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10559:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "10570:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10582:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10590:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "10598:6:105",
                "type": ""
              }
            ],
            "src": "10477:655:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11259:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11269:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11281:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11292:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11277:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11277:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11269:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11311:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "11326:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11342:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11347:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "11338:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11338:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11351:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "11334:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11334:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "11322:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11322:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11304:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11304:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11304:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IFeeHandler_$18265__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11228:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11239:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11250:4:105",
                "type": ""
              }
            ],
            "src": "11137:224:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11398:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11415:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11422:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11427:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11418:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11418:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11408:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11408:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11408:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11455:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11458:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11448:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11448:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11448:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11479:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11482:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "11472:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11472:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11472:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "11366:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11663:230:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11680:3:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11693:2:105",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "11697:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "11689:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11689:15:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11710:26:105",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "11706:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11706:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "11685:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11685:53:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11673:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11673:66:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11673:66:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11748:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11768:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "11762:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11762:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "11752:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "11810:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11818:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11806:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11806:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11829:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11834:2:105",
                            "type": "",
                            "value": "20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11825:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11825:12:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11839:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "11784:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11784:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11784:62:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11855:32:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11870:3:105"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "11875:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11866:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11866:16:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11884:2:105",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11862:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11862:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "11855:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11631:3:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11636:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11644:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11655:3:105",
                "type": ""
              }
            ],
            "src": "11498:395:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11930:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11947:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11954:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11959:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11950:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11950:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11940:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11940:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11940:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11987:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11990:4:105",
                        "type": "",
                        "value": "0x12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11980:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11980:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11980:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12011:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12014:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "12004:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12004:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12004:15:105"
                }
              ]
            },
            "name": "panic_error_0x12",
            "nodeType": "YulFunctionDefinition",
            "src": "11898:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12067:154:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12077:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "12087:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12081:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12114:21:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "12129:1:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12132:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "12125:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12125:10:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "12118:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12159:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "12161:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12161:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12161:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "12154:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "12147:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12147:11:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12144:37:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12190:25:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "12203:1:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12206:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12199:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12199:10:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "12211:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "mod",
                      "nodeType": "YulIdentifier",
                      "src": "12195:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12195:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "12190:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "mod_t_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "12052:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "12055:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "12061:1:105",
                "type": ""
              }
            ],
            "src": "12030:191:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12258:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12275:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12282:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12287:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "12278:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12278:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12268:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12268:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12268:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12315:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12318:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12308:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12308:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12308:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12339:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12342:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "12332:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12332:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12332:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "12226:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12403:154:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12413:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "12423:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12417:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12450:21:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "12465:1:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12468:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "12461:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12461:10:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "12454:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12495:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "12497:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12497:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12497:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "12490:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "12483:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12483:11:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12480:37:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12526:25:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "12539:1:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12542:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12535:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12535:10:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "12547:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "12531:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12531:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "12526:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "12388:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "12391:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "12397:1:105",
                "type": ""
              }
            ],
            "src": "12358:199:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12709:141:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12726:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12737:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12719:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12719:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12719:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12764:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12775:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12760:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12760:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12780:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12753:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12753:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12753:30:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12792:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12817:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12829:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12840:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12825:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12825:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "12800:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12800:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12792:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12670:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12681:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12689:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12700:4:105",
                "type": ""
              }
            ],
            "src": "12562:288:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12945:544:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12991:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13000:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13003:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12993:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12993:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12993:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12966:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12975:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12962:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12962:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12987:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "12958:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12958:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12955:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13016:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13036:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "13030:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13030:16:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "13020:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13089:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13098:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13101:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "13091:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13091:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13091:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "13061:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13069:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "13058:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13058:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "13055:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13114:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13128:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "13139:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13124:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13124:22:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "13118:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13194:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13203:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13206:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "13196:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13196:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13196:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "13173:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "13177:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "13169:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "13169:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "13184:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "13165:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13165:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "13158:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13158:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "13155:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13219:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "13235:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "13229:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13229:9:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "13223:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13247:61:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "13304:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "13276:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13276:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "13260:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13260:48:105"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nodeType": "YulTypedName",
                      "src": "13251:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "13324:5:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "13331:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13317:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13317:17:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13317:17:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13380:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13389:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13392:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "13382:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13382:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13382:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "13357:2:105"
                              },
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "13361:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "13353:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "13353:11:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13366:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13349:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13349:20:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "13371:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "13346:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13346:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "13343:53:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13431:2:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13435:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13427:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13427:11:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nodeType": "YulIdentifier",
                            "src": "13444:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13451:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13440:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13440:14:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "13456:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "13405:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13405:54:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13405:54:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13468:15:105",
                  "value": {
                    "name": "array",
                    "nodeType": "YulIdentifier",
                    "src": "13478:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "13468:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12911:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "12922:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12934:6:105",
                "type": ""
              }
            ],
            "src": "12855:634:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13663:220:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13680:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13691:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13673:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13673:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13673:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13703:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "13728:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13740:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13751:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13736:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13736:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "13711:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13711:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13703:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13775:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13786:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13771:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13771:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "13795:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13803:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13791:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13791:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13764:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13764:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13764:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13829:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13840:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13825:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13825:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "13849:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13857:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13845:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13845:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13818:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13818:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13818:59:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr_t_uint8_t_uint64__to_t_bytes_memory_ptr_t_uint8_t_uint64__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13616:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "13627:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "13635:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13643:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13654:4:105",
                "type": ""
              }
            ],
            "src": "13494:389:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14085:265:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14102:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14117:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14125:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14113:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14113:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14095:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14095:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14095:36:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14151:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14162:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14147:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14147:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14171:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14179:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14167:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14167:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14140:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14140:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14140:59:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14219:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14230:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14215:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14215:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "14235:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14208:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14208:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14208:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14262:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14273:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14258:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14258:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14278:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14251:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14251:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14251:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14291:53:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "14316:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14328:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14339:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14324:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14324:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "14299:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14299:45:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14291:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_uint8_t_uint64_t_bytes32_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14030:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "14041:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "14049:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14057:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14065:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14076:4:105",
                "type": ""
              }
            ],
            "src": "13888:462:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14402:88:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "14433:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "14435:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14435:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "14435:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "14418:5:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14429:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "14425:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14425:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "14415:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14415:17:105"
                  },
                  "nodeType": "YulIf",
                  "src": "14412:43:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14464:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "14475:5:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14482:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14471:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14471:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "14464:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "14384:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "14394:3:105",
                "type": ""
              }
            ],
            "src": "14355:135:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14616:98:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14633:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14644:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14626:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14626:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14626:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14656:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14681:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14693:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14704:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14689:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14689:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "14664:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14664:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14656:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14585:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14596:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14607:4:105",
                "type": ""
              }
            ],
            "src": "14495:219:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14893:179:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14910:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14921:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14903:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14903:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14903:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14944:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14955:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14940:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14940:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14960:2:105",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14933:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14933:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14933:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14983:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14994:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14979:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14979:18:105"
                      },
                      {
                        "hexValue": "6e6f2046656548616e646c65722c206d73672e76616c756520213d2030",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14999:31:105",
                        "type": "",
                        "value": "no FeeHandler, msg.value != 0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14972:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14972:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14972:59:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15040:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15052:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15063:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15048:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15048:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15040:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14870:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14884:4:105",
                "type": ""
              }
            ],
            "src": "14719:353:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15143:200:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "15160:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "15165:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15153:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15153:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15153:19:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "15198:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15203:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15194:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15194:14:105"
                      },
                      {
                        "name": "start",
                        "nodeType": "YulIdentifier",
                        "src": "15210:5:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "15217:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "15181:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15181:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15181:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "15248:3:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "15253:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "15244:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15244:16:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15262:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15240:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15240:27:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15269:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15233:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15233:38:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15233:38:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15280:57:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "15295:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "15308:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15316:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15304:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15304:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15325:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "15321:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15321:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "15300:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15300:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15291:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15291:39:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15332:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15287:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15287:50:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "15280:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "start",
                "nodeType": "YulTypedName",
                "src": "15112:5:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "15119:6:105",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "15127:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "15135:3:105",
                "type": ""
              }
            ],
            "src": "15077:266:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15637:470:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15654:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "15669:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15685:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15690:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "15681:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15681:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "15694:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "15677:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15677:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15665:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15665:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15647:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15647:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15647:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15718:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15729:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15714:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15714:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "15738:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15746:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15734:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15734:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15707:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15707:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15707:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15772:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15783:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15768:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15768:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "15792:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15800:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15788:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15788:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15761:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15761:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15761:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15826:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15837:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15822:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15822:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "15842:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15815:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15815:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15815:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15869:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15880:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15865:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15865:19:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15886:3:105",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15858:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15858:32:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15858:32:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "15899:76:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "15939:6:105"
                      },
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "15947:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15959:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15970:3:105",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15955:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15955:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "15913:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15913:62:105"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "15903:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15995:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16006:3:105",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15991:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15991:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "16016:6:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16024:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "16012:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16012:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15984:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15984:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15984:51:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16044:57:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value6",
                        "nodeType": "YulIdentifier",
                        "src": "16078:6:105"
                      },
                      {
                        "name": "value7",
                        "nodeType": "YulIdentifier",
                        "src": "16086:6:105"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "16094:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "16052:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16052:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16044:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint8_t_uint8_t_bytes32_t_bytes_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_uint8_t_bytes32_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15550:9:105",
                "type": ""
              },
              {
                "name": "value7",
                "nodeType": "YulTypedName",
                "src": "15561:6:105",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "15569:6:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "15577:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "15585:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "15593:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "15601:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "15609:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15617:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15628:4:105",
                "type": ""
              }
            ],
            "src": "15348:759:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16158:163:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16168:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16178:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "16172:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16205:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "16224:5:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "16231:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "16220:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16220:14:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "16209:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16262:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "16264:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16264:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16264:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "16249:7:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "16258:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "16246:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16246:15:105"
                  },
                  "nodeType": "YulIf",
                  "src": "16243:41:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16293:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "16304:7:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16313:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16300:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16300:15:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "16293:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "16140:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "16150:3:105",
                "type": ""
              }
            ],
            "src": "16112:209:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16511:227:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16528:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "16539:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16521:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16521:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16521:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16566:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16577:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16562:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16562:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "16586:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16602:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16607:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "16598:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16598:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16611:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "16594:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16594:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16582:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16582:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16555:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16555:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16555:60:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16635:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16646:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16631:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16631:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16651:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16624:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16624:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16624:30:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16663:69:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "16697:6:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "16705:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16717:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16728:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16713:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16713:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "16671:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16671:61:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16663:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_address_t_bytes_calldata_ptr__to_t_bytes32_t_address_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16456:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "16467:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "16475:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16483:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16491:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16502:4:105",
                "type": ""
              }
            ],
            "src": "16326:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16996:397:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17013:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "17028:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17036:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17024:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17024:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17006:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17006:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17006:36:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17062:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17073:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17058:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17058:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "17078:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17051:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17051:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17051:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17105:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17116:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17101:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17101:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "17125:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17133:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17121:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17121:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17094:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17094:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17094:59:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17173:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17184:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17169:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17169:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17189:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17162:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17162:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17162:31:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17202:76:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "17242:6:105"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "17250:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17262:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17273:3:105",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17258:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17258:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "17216:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17216:62:105"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "17206:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17298:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17309:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17294:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17294:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "17319:6:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17327:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17315:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17315:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17287:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17287:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17287:51:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17347:40:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "17372:6:105"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "17380:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "17355:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17355:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17347:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8_t_bytes32_t_uint64_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_uint8_t_bytes32_t_uint64_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16925:9:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "16936:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "16944:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "16952:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "16960:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16968:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16976:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16987:4:105",
                "type": ""
              }
            ],
            "src": "16743:650:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17436:74:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17459:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "17461:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17461:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17461:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17456:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17449:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17449:9:105"
                  },
                  "nodeType": "YulIf",
                  "src": "17446:35:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17490:14:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "17499:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17502:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "mod",
                      "nodeType": "YulIdentifier",
                      "src": "17495:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17495:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "17490:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "mod_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "17421:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "17424:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "17430:1:105",
                "type": ""
              }
            ],
            "src": "17398:112:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17561:74:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17584:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "17586:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17586:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17586:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17581:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17574:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17574:9:105"
                  },
                  "nodeType": "YulIf",
                  "src": "17571:35:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17615:14:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "17624:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17627:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "17620:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17620:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "17615:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "17546:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "17549:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "17555:1:105",
                "type": ""
              }
            ],
            "src": "17515:120:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17847:286:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17857:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17869:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17880:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17865:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17865:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17857:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17900:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17911:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17893:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17893:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17893:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17938:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17949:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17934:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17934:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "17958:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17966:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17954:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17954:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17927:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17927:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17927:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17992:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18003:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17988:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17988:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "18012:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18020:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18008:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18008:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17981:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17981:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17981:59:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18060:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18071:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18056:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18056:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "18076:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18049:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18049:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18049:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18103:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18114:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18099:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18099:19:105"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "18120:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18092:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18092:35:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18092:35:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_uint8_t_uint64_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_uint64_t_bytes32_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17784:9:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "17795:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "17803:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "17811:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17819:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17827:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17838:4:105",
                "type": ""
              }
            ],
            "src": "17640:493:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18307:374:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18317:16:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "18330:3:105"
                  },
                  "variables": [
                    {
                      "name": "pos_1",
                      "nodeType": "YulTypedName",
                      "src": "18321:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18342:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "18362:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "18356:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18356:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "18346:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18378:12:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "18387:3:105"
                  },
                  "variableNames": [
                    {
                      "name": "pos_1",
                      "nodeType": "YulIdentifier",
                      "src": "18378:5:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18399:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "18409:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "18403:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18422:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "18440:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "18448:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18436:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18436:15:105"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "18426:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18460:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "18469:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "18464:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "18528:126:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos_1",
                              "nodeType": "YulIdentifier",
                              "src": "18549:5:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "18562:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "18556:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18556:13:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "18542:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18542:28:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "18542:28:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "18583:23:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos_1",
                              "nodeType": "YulIdentifier",
                              "src": "18596:5:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "18603:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "18592:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18592:14:105"
                        },
                        "variableNames": [
                          {
                            "name": "pos_1",
                            "nodeType": "YulIdentifier",
                            "src": "18583:5:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "18619:25:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "18633:6:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "18641:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "18629:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18629:15:105"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "18619:6:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "18490:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "18493:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "18487:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18487:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "18501:18:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "18503:14:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "18512:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18515:1:105",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "18508:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18508:9:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "18503:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "18483:3:105",
                    "statements": []
                  },
                  "src": "18479:175:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18663:12:105",
                  "value": {
                    "name": "pos_1",
                    "nodeType": "YulIdentifier",
                    "src": "18670:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "18663:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "18283:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18288:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "18299:3:105",
                "type": ""
              }
            ],
            "src": "18138:543:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18815:119:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18825:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18837:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18848:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18833:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18833:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18825:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18867:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "18878:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18860:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18860:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18860:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18905:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18916:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18901:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18901:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "18921:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18894:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18894:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18894:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18776:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18787:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18795:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18806:4:105",
                "type": ""
              }
            ],
            "src": "18686:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19058:98:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19075:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19086:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19068:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19068:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19068:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19098:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "19123:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19135:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19146:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19131:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19131:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "19106:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19106:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19098:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19027:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "19038:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19049:4:105",
                "type": ""
              }
            ],
            "src": "18939:217:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19335:228:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19352:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19363:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19345:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19345:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19345:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19386:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19397:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19382:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19382:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19402:2:105",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19375:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19375:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19375:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19425:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19436:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19421:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19421:18:105"
                      },
                      {
                        "hexValue": "446f6573206e6f7420616c6c6f772064656372656d656e7473206f6620746865",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19441:34:105",
                        "type": "",
                        "value": "Does not allow decrements of the"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19414:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19414:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19414:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19496:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19507:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19492:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19492:18:105"
                      },
                      {
                        "hexValue": "206e6f6e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19512:8:105",
                        "type": "",
                        "value": " nonce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19485:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19485:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19485:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19530:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19542:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19553:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19538:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19538:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19530:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19312:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19326:4:105",
                "type": ""
              }
            ],
            "src": "19161:402:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19742:166:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19759:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19770:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19752:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19752:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19752:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19793:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19804:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19789:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19789:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19809:2:105",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19782:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19782:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19782:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19832:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19843:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19828:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19828:18:105"
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19848:18:105",
                        "type": "",
                        "value": "Pausable: paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19821:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19821:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19821:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19876:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19888:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19899:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19884:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19884:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19876:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19719:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19733:4:105",
                "type": ""
              }
            ],
            "src": "19568:340:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20040:172:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "20050:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20062:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20073:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20058:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20058:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20050:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20092:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "20107:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20119:3:105",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20124:10:105",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "20115:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20115:20:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "20103:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20103:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20085:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20085:52:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20085:52:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20157:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20168:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20153:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20153:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "20177:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20193:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20198:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "20189:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20189:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20202:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "20185:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20185:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "20173:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20173:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20146:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20146:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20146:60:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes4_t_address__to_t_bytes4_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20001:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "20012:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "20020:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20031:4:105",
                "type": ""
              }
            ],
            "src": "19913:299:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20295:167:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20341:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20350:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20353:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20343:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20343:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20343:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "20316:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20325:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "20312:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20312:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20337:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "20308:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20308:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "20305:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "20366:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20385:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "20379:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20379:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "20370:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "20426:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "20404:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20404:28:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20404:28:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20441:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "20451:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "20441:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20261:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "20272:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "20284:6:105",
                "type": ""
              }
            ],
            "src": "20217:245:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20594:172:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "20604:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20616:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20627:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20612:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20612:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20604:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20646:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "20661:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20677:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20682:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "20673:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20673:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20686:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "20669:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20669:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "20657:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20657:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20639:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20639:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20639:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20710:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20721:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20706:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20706:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "20730:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20742:3:105",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "20747:10:105",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "20738:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20738:20:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "20726:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20726:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20699:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20699:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20699:61:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bytes4__to_t_address_t_bytes4__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20555:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "20566:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "20574:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20585:4:105",
                "type": ""
              }
            ],
            "src": "20467:299:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21019:144:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "21036:3:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21045:3:105",
                            "type": "",
                            "value": "240"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21050:4:105",
                            "type": "",
                            "value": "6401"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "21041:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21041:14:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21029:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21029:27:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21029:27:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "21076:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21081:1:105",
                            "type": "",
                            "value": "2"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21072:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21072:11:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "21085:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21065:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21065:27:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21065:27:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "21112:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21117:2:105",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21108:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21108:12:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "21122:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21101:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21101:28:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21101:28:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21138:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "21149:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21154:2:105",
                        "type": "",
                        "value": "66"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21145:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21145:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "21138:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "20987:3:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "20992:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "21000:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "21011:3:105",
                "type": ""
              }
            ],
            "src": "20771:392:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21200:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21217:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21224:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21229:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "21220:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21220:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21210:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21210:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21210:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21257:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21260:4:105",
                        "type": "",
                        "value": "0x21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21250:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21250:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21250:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21281:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21284:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "21274:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21274:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21274:15:105"
                }
              ]
            },
            "name": "panic_error_0x21",
            "nodeType": "YulFunctionDefinition",
            "src": "21168:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21474:174:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21491:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21502:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21484:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21484:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21484:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21525:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21536:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21521:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21521:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21541:2:105",
                        "type": "",
                        "value": "24"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21514:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21514:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21514:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21564:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21575:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21560:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21560:18:105"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21580:26:105",
                        "type": "",
                        "value": "ECDSA: invalid signature"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21553:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21553:54:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21553:54:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21616:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21628:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21639:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21624:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21624:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21616:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "21451:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "21465:4:105",
                "type": ""
              }
            ],
            "src": "21300:348:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21827:181:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21844:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21855:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21837:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21837:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21837:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21878:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21889:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21874:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21874:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21894:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21867:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21867:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21867:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21917:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21928:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21913:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21913:18:105"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21933:33:105",
                        "type": "",
                        "value": "ECDSA: invalid signature length"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21906:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21906:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21906:61:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21976:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21988:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21999:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21984:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21984:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21976:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "21804:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "21818:4:105",
                "type": ""
              }
            ],
            "src": "21653:355:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "22187:224:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22204:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22215:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22197:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22197:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22197:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22238:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22249:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22234:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22234:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22254:2:105",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22227:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22227:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22227:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22277:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22288:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22273:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22273:18:105"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22293:34:105",
                        "type": "",
                        "value": "ECDSA: invalid signature 's' val"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22266:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22266:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22266:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22348:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22359:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22344:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22344:18:105"
                      },
                      {
                        "hexValue": "7565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22364:4:105",
                        "type": "",
                        "value": "ue"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22337:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22337:32:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22337:32:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "22378:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22390:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22401:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "22386:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22386:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "22378:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "22164:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "22178:4:105",
                "type": ""
              }
            ],
            "src": "22013:398:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "22590:224:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22607:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22618:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22600:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22600:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22600:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22641:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22652:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22637:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22637:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22657:2:105",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22630:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22630:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22630:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22680:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22691:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22676:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22676:18:105"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22696:34:105",
                        "type": "",
                        "value": "ECDSA: invalid signature 'v' val"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22669:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22669:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22669:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22751:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22762:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22747:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22747:18:105"
                      },
                      {
                        "hexValue": "7565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22767:4:105",
                        "type": "",
                        "value": "ue"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22740:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22740:32:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22740:32:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "22781:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22793:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22804:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "22789:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22789:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "22781:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "22567:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "22581:4:105",
                "type": ""
              }
            ],
            "src": "22416:398:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "22993:170:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23010:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23021:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23003:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23003:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23003:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23044:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23055:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23040:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23040:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23060:2:105",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23033:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23033:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23033:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23083:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23094:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23079:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23079:18:105"
                      },
                      {
                        "hexValue": "5061757361626c653a206e6f7420706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "23099:22:105",
                        "type": "",
                        "value": "Pausable: not paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23072:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23072:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23072:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "23131:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23143:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23154:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23139:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23139:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23131:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "22970:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "22984:4:105",
                "type": ""
              }
            ],
            "src": "22819:344:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "23381:276:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "23391:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23403:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23414:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23399:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23399:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23391:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23434:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "23445:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23427:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23427:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23427:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23472:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23483:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23468:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23468:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "23488:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23461:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23461:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23461:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23515:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23526:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23511:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23511:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "23531:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23504:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23504:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23504:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23558:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23569:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23554:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23554:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "23574:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23547:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23547:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23547:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23601:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23612:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23597:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23597:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "23622:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23638:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23643:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "23634:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23634:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "23647:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "23630:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "23630:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "23618:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23618:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23590:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23590:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23590:61:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "23318:9:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "23329:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "23337:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "23345:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "23353:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "23361:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "23372:4:105",
                "type": ""
              }
            ],
            "src": "23168:489:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "23843:217:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "23853:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23865:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23876:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23861:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23861:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23853:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23896:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "23907:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23889:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23889:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23889:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23934:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23945:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23930:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23930:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "23954:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23962:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "23950:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23950:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23923:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23923:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23923:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23988:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23999:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23984:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23984:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "24004:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23977:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23977:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23977:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24031:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24042:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24027:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24027:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "24047:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24020:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24020:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24020:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "23788:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "23799:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "23807:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "23815:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "23823:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "23834:4:105",
                "type": ""
              }
            ],
            "src": "23662:398:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "24113:80:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "24140:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "24142:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "24142:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "24142:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "24129:1:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "24136:1:105"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "24132:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24132:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "24126:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24126:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "24123:39:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "24171:16:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "24182:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "24185:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "24178:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24178:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "24171:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "24096:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "24099:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "24105:3:105",
                "type": ""
              }
            ],
            "src": "24065:128:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint8t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_uint64(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_available_length_bytes(src, length, end) -> array\n    {\n        array := allocate_memory(array_allocation_size_bytes(length))\n        mstore(array, length)\n        if gt(add(src, length), end) { revert(0, 0) }\n        calldatacopy(add(array, 0x20), src, length)\n        mstore(add(add(array, length), 0x20), 0)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        array := abi_decode_available_length_bytes(add(offset, 0x20), calldataload(offset), end)\n    }\n    function abi_decode_struct_Proposal(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x80) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x80)\n        let _1 := 0xffffffffffffffff\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, abi_decode_uint8(headStart))\n        mstore(add(memPtr, 32), abi_decode_uint64(add(headStart, 32)))\n        mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, _1) { revert(0, 0) }\n        mstore(add(memPtr, 96), abi_decode_bytes(add(headStart, offset), end))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let _4 := 0x20\n        if gt(_3, _1) { panic_error_0x41() }\n        let _5 := shl(5, _3)\n        let dst := allocate_memory(add(_5, _4))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let srcEnd := add(add(_2, _5), _4)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _4)\n        for { } lt(src, srcEnd) { src := add(src, _4) }\n        {\n            let innerOffset := calldataload(src)\n            if gt(innerOffset, _1)\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            mstore(dst, abi_decode_struct_Proposal(add(add(_2, innerOffset), _4), dataEnd))\n            dst := add(dst, _4)\n        }\n        value0 := dst_1\n        let offset_1 := calldataload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_string_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        value0 := abi_decode_available_length_bytes(add(_1, 32), calldataload(_1), dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_IAccessControlSegregator_$18093__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_uint8t_bytes32t_bytes_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_uint64_t_bytes_memory_ptr__to_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_bytes32t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_bool(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint8t_uint64(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := abi_decode_uint64(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_struct$_Proposal_$7947_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_struct_Proposal(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_encode_tuple_t_contract$_IFeeHandler_$18265__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n        let length := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(pos, 20), length)\n        end := add(add(pos, length), 20)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function mod_t_uint64(x, y) -> r\n    {\n        let _1 := 0xffffffffffffffff\n        let y_1 := and(y, _1)\n        if iszero(y_1) { panic_error_0x12() }\n        r := mod(and(x, _1), y_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint64(x, y) -> r\n    {\n        let _1 := 0xffffffffffffffff\n        let y_1 := and(y, _1)\n        if iszero(y_1) { panic_error_0x12() }\n        r := div(and(x, _1), y_1)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_uint8_t_uint64__to_t_bytes_memory_ptr_t_uint8_t_uint64__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        tail := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint8_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_uint8_t_uint64_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"no FeeHandler, msg.value != 0\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_bytes_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_uint8_t_bytes32_t_bytes_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_uint8_t_bytes32_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 192)\n        let tail_1 := abi_encode_bytes_calldata(value4, value5, add(headStart, 192))\n        mstore(add(headStart, 160), sub(tail_1, headStart))\n        tail := abi_encode_bytes_calldata(value6, value7, tail_1)\n    }\n    function increment_t_uint64(value) -> ret\n    {\n        let _1 := 0xffffffffffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_bytes_calldata_ptr__to_t_bytes32_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes_calldata(value2, value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_uint8_t_bytes32_t_uint64_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_uint8_t_bytes32_t_uint64_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffff))\n        mstore(add(headStart, 96), 160)\n        let tail_1 := abi_encode_bytes_calldata(value3, value4, add(headStart, 160))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value5, tail_1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_uint64_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_uint64_t_bytes32_t_bytes32__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffff))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let pos_1 := pos\n        let length := mload(value0)\n        pos_1 := pos\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos_1, mload(srcPtr))\n            pos_1 := add(pos_1, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos_1\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Does not allow decrements of the\")\n        mstore(add(headStart, 96), \" nonce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes4_t_address__to_t_bytes4_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, shl(224, 0xffffffff)))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes4__to_t_address_t_bytes4__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, shl(224, 0xffffffff)))\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, shl(240, 6401))\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 'v' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "621:18030:51:-:0;;;3796:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2455:602:37;;;;;;;;;;;-1:-1:-1;;;2455:602:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2455:602:37;;;;-1:-1:-1;763:15:100;;-1:-1:-1;;763:15:100;;;2541:22:37;;;;2778:25;;;;2597;763:15:100;2813:31:37;;;2873:13;2854:32;;2455:602;;;2651:117;2923:58;2651:117;2541:22;2597:25;3633:73;;;;;;726:25:105;;;767:18;;;760:34;;;810:18;;;803:34;;;3677:13:37;853:18:105;;;846:34;3700:4:37;896:19:105;;;889:61;3597:7:37;;698:19:105;;3633:73:37;;;;;;;;;;;;3623:84;;;;;;3616:91;;3457:257;;;;;;2923:58;2896:85;;3014:4;2991:28;;3029:21;;-1:-1:-1;;;;3884:20:51::1;::::0;::::1;;::::0;3914:14:::1;:56:::0;;-1:-1:-1;;;;;;3914:56:51::1;-1:-1:-1::0;;;;;3914:56:51;::::1;;::::0;;3981:20:::1;3988:12;:10;:12::i;:::-;3981:6;:20::i;:::-;3796:212:::0;;621:18030;;3142:315;3196:7;3232:10;3275:2;3256:8;:21;;;;:49;;-1:-1:-1;;;;;;3281:24:51;;;;;;:16;:24;;;;;;;;3256:49;3252:176;;;-1:-1:-1;;;3383:14:51;3379:23;3366:37;3362:2;3358:46;3252:176;3444:6;3142:315;-1:-1:-1;3142:315:51:o;1836:123:100:-;1177:16;:14;:16::i;:::-;1909:7:::1;:14:::0;;-1:-1:-1;;1909:14:100::1;1919:4;1909:14;::::0;;1938::::1;::::0;-1:-1:-1;;;;;1125:32:105;;1107:51;;1938:14:100::1;::::0;1095:2:105;1080:18;1938:14:100::1;;;;;;;1836:123:::0;:::o;1217:93::-;1275:7;;;;1274:8;1266:37;;;;-1:-1:-1;;;1266:37:100;;1371:2:105;1266:37:100;;;1353:21:105;1410:2;1390:18;;;1383:30;-1:-1:-1;;;1429:18:105;;;1422:46;1485:18;;1266:37:100;;;;;;;;1217:93::o;14:448:105:-;91:6;99;152:2;140:9;131:7;127:23;123:32;120:52;;;168:1;165;158:12;120:52;200:9;194:16;250:4;243:5;239:16;232:5;229:27;219:55;;270:1;267;260:12;219:55;343:2;328:18;;322:25;293:5;;-1:-1:-1;;;;;;378:33:105;;366:46;;356:74;;426:1;423;416:12;356:74;449:7;439:17;;;14:448;;;;;:::o;1169:340::-;621:18030:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "621:18030:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1082:26;;;;;;;;;;-1:-1:-1;1082:26:51;;;;;;;-1:-1:-1;;;;;1082:26:51;;;;;;-1:-1:-1;;;;;178:32:105;;;160:51;;148:2;133:18;1082:26:51;;;;;;;;1703:63;;;;;;;;;;-1:-1:-1;1703:63:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:25:105;;;772:2;757:18;1703:63:51;638:177:105;13319:1406:51;;;;;;;;;;-1:-1:-1;13319:1406:51;;;;;:::i;:::-;;:::i;:::-;;16992:93;;;;;;;;;;-1:-1:-1;16992:93:51;;;;;:::i;:::-;;:::i;1152:46::-;;;;;;;;;;-1:-1:-1;1152:46:51;;;;-1:-1:-1;;;;;1152:46:51;;;1395;;;;;;;;;;-1:-1:-1;1395:46:51;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1395:46:51;;;;;;-1:-1:-1;;;;;5800:31:105;;;5782:50;;5770:2;5755:18;1395:46:51;5638:200:105;880:76:100;;;;;;;;;;-1:-1:-1;919:4:100;942:7;;;880:76;;;6008:14:105;;6001:22;5983:41;;5971:2;5956:18;880:76:100;5843:187:105;15113:149:51;;;;;;;;;;;;;:::i;10254:1155::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4289:89::-;;;;;;;;;;;;;:::i;1484:62::-;;;;;;;;;;-1:-1:-1;1484:62:51;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1484:62:51;;;5600:327;;;;;;;;;;-1:-1:-1;5600:327:51;;;;;:::i;:::-;;:::i;8540:179::-;;;;;;;;;;-1:-1:-1;8540:179:51;;;;;:::i;:::-;;:::i;6411:202::-;;;;;;;;;;-1:-1:-1;6411:202:51;;;;;:::i;:::-;;:::i;17375:192::-;;;;;;;;;;-1:-1:-1;17375:192:51;;;;;:::i;:::-;;:::i;8003:210::-;;;;;;;;;;-1:-1:-1;8003:210:51;;;;;:::i;:::-;;:::i;1042:34::-;;;;;;;;;;;;;;;;;;9359:4:105;9347:17;;;9329:36;;9317:2;9302:18;1042:34:51;9187:184:105;17857:792:51;;;;;;;;;;-1:-1:-1;17857:792:51;;;;;:::i;:::-;;:::i;9129:207::-;;;;;;;;;;-1:-1:-1;9129:207:51;;;;;:::i;:::-;;:::i;7544:131::-;;;;;;;;;;-1:-1:-1;7544:131:51;;;;;:::i;:::-;;:::i;15740:303::-;;;;;;;;;;-1:-1:-1;15740:303:51;;;;;:::i;:::-;;:::i;16509:99::-;;;;;;;;;;-1:-1:-1;16509:99:51;;;;;:::i;:::-;;:::i;6969:223::-;;;;;;;;;;-1:-1:-1;6969:223:51;;;;;:::i;:::-;;:::i;12201:242::-;;;;;;;;;;-1:-1:-1;12201:242:51;;;;;:::i;:::-;;:::i;1589:48::-;;;;;;;;;;-1:-1:-1;1589:48:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;1115:30;;;;;;;;;;-1:-1:-1;1115:30:51;;;;-1:-1:-1;;;;;1115:30:51;;;4733:159;;;;;;;;;;;;;:::i;13319:1406::-;1177:16:100;:14;:16::i;:::-;13435::51;;13431:55:::1;;13465:21;;-1:-1:-1::0;;;13465:21:51::1;;;;;;;;;;;13431:55;13501:28;13508:9;13519;;13501:6;:28::i;:::-;13496:65;;13538:23;;-1:-1:-1::0;;;13538:23:51::1;;;;;;;;;;;13496:65;13577:9;13572:1147;13596:9;:16;13592:1;:20;13572:1147;;;13636:74;13655:9;13665:1;13655:12;;;;;;;;:::i;:::-;;;;;;;:27;;;13684:9;13694:1;13684:12;;;;;;;;:::i;:::-;;;;;;;:25;;;-1:-1:-1::0;;;;;13636:74:51::1;:18;:74::i;:::-;13633:120;;;13730:8;;13633:120;13767:15;13785:27;:52;13813:9;13823:1;13813:12;;;;;;;;:::i;:::-;;;;;;;:23;;;13785:52;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;13785:52:51::1;13767:70;;13851:16;13897:7;13906:9;13916:1;13906:12;;;;;;;;:::i;:::-;;;;;;;:17;;;13880:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13870:55;;;;;;13851:74;;13940:23;13975:7;13940:43;;14108:3;14080:9;14090:1;14080:12;;;;;;;;:::i;:::-;;;;;;;:25;;;:31;;;;:::i;:::-;-1:-1:-1::0;;;;;14074:38:51::1;:1;:38;;13998:10;:39;14009:9;14019:1;14009:12;;;;;;;;:::i;:::-;;;;;;;:27;;;13998:39;;;;;;;;;;;;;;;:72;14066:3;14038:9;14048:1;14038:12;;;;;;;;:::i;:::-;;;;;;;:25;;;:31;;;;:::i;:::-;-1:-1:-1::0;;;;;13998:72:51::1;;;;;;;;;;;;;:114;;;;;;;;;;;14131:14;-1:-1:-1::0;;;;;14131:30:51::1;;14162:9;14172:1;14162:12;;;;;;;;:::i;:::-;;;;;;;:23;;;14187:9;14197:1;14187:12;;;;;;;;:::i;:::-;;;;;;;:17;;;14131:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14131:74:51::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;14127:582;;;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14441:92;14464:12;14478:9;14488:1;14478:12;;;;;;;;:::i;:::-;;;;;;;:27;;;14507:9;14517:1;14507:12;;;;;;;;:::i;:::-;;;;;;;:25;;;14441:92;;;;;;;;:::i;:::-;;;;;;;;14663:3;14635:9;14645:1;14635:12;;;;;;;;:::i;:::-;;;;;;;:25;;;:31;;;;:::i;:::-;-1:-1:-1::0;;;;;14629:38:51::1;:1;:38;;14627:41;14551:10;:39;14562:9;14572:1;14562:12;;;;;;;;:::i;:::-;;;;;;;:27;;;14551:39;;;;;;;;;;;;;;;:72;14619:3;14591:9;14601:1;14591:12;;;;;;;;:::i;:::-;;;;;;;:25;;;:31;;;;:::i;:::-;-1:-1:-1::0;;;;;14551:72:51::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14551:72:51;:117;;;;::::1;::::0;;-1:-1:-1;14686:8:51::1;::::0;-1:-1:-1;;;14686:8:51::1;14127:582;14268:100;14286:9;14296:1;14286:12;;;;;;;;:::i;:::-;;;;;;;:27;;;14315:9;14325:1;14315:12;;;;;;;;:::i;:::-;;;;;;;:25;;;14342:8;14352:15;14268:100;;;;;;;;;:::i;:::-;;;;;;;;14206:177;13619:1100;;;13572:1147;13614:3:::0;::::1;::::0;::::1;:::i;:::-;;;;13572:1147;;;;13319:1406:::0;;;:::o;16992:93::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;:::-;2917;:35::i;:::-;17065:13:::1;17071:6;17065:13;;;;;;:::i;:::-;;;;;;;;16992:93:::0;:::o;15113:149::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;15194:1:::1;15171:11:::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;15171:11:51::1;:25:::0;15167:60:::1;;15205:22;;-1:-1:-1::0;;;15205:22:51::1;;;;;;;;;;;15167:60;15242:13;::::0;::::1;::::0;;;::::1;15113:149::o:0;10254:1155::-;10426:19;10447:28;1177:16:100;:14;:16::i;:::-;10514:9:51::1;10491:32;;:19;:32;;;10487:69;;;10532:24;;-1:-1:-1::0;;;10532:24:51::1;;;;;;;;;;;10487:69;10567:14;10584:12;:10;:12::i;:::-;10618:11;::::0;10567:29;;-1:-1:-1;;;;;;10618:11:51::1;10606:300;;10668:9;:14:::0;10660:56:::1;;;::::0;-1:-1:-1;;;10660:56:51;;14921:2:105;10660:56:51::1;::::0;::::1;14903:21:105::0;14960:2;14940:18;;;14933:30;14999:31;14979:18;;;14972:59;15048:18;;10660:56:51::1;;;;;;;;;10606:300;;;10781:11;::::0;:114:::1;::::0;-1:-1:-1;;;10781:114:51;;-1:-1:-1;;;;;10781:11:51;;::::1;::::0;:22:::1;::::0;10811:9:::1;::::0;10781:114:::1;::::0;10822:6;;10830:9:::1;::::0;10841:19;;10862:10;;10874:11;;;;10887:7;;;;10781:114:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;10606:300;10915:15;10933:39:::0;;;:27:::1;:39;::::0;;;;;-1:-1:-1;;;;;10933:39:51::1;10986:21:::0;10982:64:::1;;11016:30;;-1:-1:-1::0;;;11016:30:51::1;;;;;;;;;;;10982:64;11074:35;::::0;::::1;;::::0;;;:14:::1;:35;::::0;;;;11072:37;;11074:35;;;11072:37:::1;::::0;-1:-1:-1;;;;;11072:37:51::1;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;11072:37:51::1;;;;;-1:-1:-1::0;;;;;11072:37:51::1;;;;;11057:52;;11120:23;11155:7;11120:43;;11191:14;-1:-1:-1::0;;;;;11191:22:51::1;;11214:10;11226:6;11234:11;;11191:55;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11191:55:51::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;11173:73;;11317:6;-1:-1:-1::0;;;;;11262:92:51::1;;11270:19;11291:10;11303:12;11325:11;;11338:15;11262:92;;;;;;;;;;;:::i;:::-;;;;;;;;11364:38;;;10254:1155:::0;;;;;;;;;:::o;4289:89::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;4351:20:::1;4358:12;:10;:12::i;:::-;4351:6;:20::i;:::-;4289:89::o:0;5600:327::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;5747:39:::1;::::0;;;:27:::1;:39;::::0;;;;;;;;:56;;-1:-1:-1;;;;;;5747:56:51::1;-1:-1:-1::0;;;;;5747:56:51;::::1;::::0;;::::1;::::0;;;5866:54;;-1:-1:-1;;;5866:54:51;;5747:56;;;5866:19:::1;::::0;:54:::1;::::0;5747:39;;5898:15;;5915:4;;;;5866:54:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5737:190;5600:327:::0;;;;;:::o;8540:179::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;8625:11:::1;:40:::0;;-1:-1:-1;;;;;;8625:40:51::1;-1:-1:-1::0;;;;;8625:40:51;::::1;::::0;;::::1;::::0;;;8680:32:::1;::::0;160:51:105;;;8680:32:51::1;::::0;148:2:105;133:18;8680:32:51::1;14:203:105::0;6411:202:51;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;6573:33:::1;::::0;-1:-1:-1;;;6573:33:51;;-1:-1:-1;;;;;178:32:105;;;6573:33:51::1;::::0;::::1;160:51:105::0;6548:14:51;;6573:19;;::::1;::::0;::::1;::::0;133:18:105;;6573:33:51::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6504:109;6411:202:::0;;:::o;17375:192::-;17462:4;17535:18;17550:3;17535:12;:18;:::i;:::-;17485:20;;;;;;;:10;:20;;;;;17529:1;:25;;;;17485:20;17506:18;17521:3;17506:12;:18;:::i;:::-;17485:40;;;;;;;;;;;;:70;17559:1;17485:75;;17478:82;;17375:192;;;;:::o;8003:210::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;8094:14:::1;:59:::0;;-1:-1:-1;;;;;;8094:59:51::1;-1:-1:-1::0;;;;;8094:59:51;::::1;::::0;;::::1;::::0;;;8168:38:::1;::::0;160:51:105;;;8168:38:51::1;::::0;148:2:105;133:18;8168:38:51::1;14:203:105::0;17857:792:51;17949:4;17965:27;18009:9;:16;-1:-1:-1;;;;;17995:31:51;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17995:31:51;;17965:61;;18041:9;18036:388;18060:9;:16;18056:1;:20;18036:388;;;941:93;18212:9;18222:1;18212:12;;;;;;;;:::i;:::-;;;;;;;:27;;;18261:9;18271:1;18261:12;;;;;;;;:::i;:::-;;;;;;;:25;;;18308:9;18318:1;18308:12;;;;;;;;:::i;:::-;;;;;;;:23;;;18363:9;18373:1;18363:12;;;;;;;;:::i;:::-;;;;;;;:17;;;18353:28;;;;;;18140:259;;;;;;;;;;;17893:25:105;;;17966:4;17954:17;;;;17949:2;17934:18;;17927:45;-1:-1:-1;;;;;18008:31:105;;;;18003:2;17988:18;;17981:59;18071:2;18056:18;;18049:34;18114:3;18099:19;;18092:35;17880:3;17865:19;;17640:493;18140:259:51;;;;;;;;;;;;;18113:300;;;;;;18097:10;18108:1;18097:13;;;;;;;;:::i;:::-;;;;;;;;;;:316;18078:3;;;;:::i;:::-;;;;18036:388;;;;18434:14;18451:153;18594:9;;18451:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18544:28:51;;18451:134;;-1:-1:-1;757:124:51;;-1:-1:-1;18544:28:51;;18561:10;;18544:28;;;:::i;:::-;;;;;;;;;;;;;18534:39;;;;;;18489:85;;;;;;;;18860:25:105;;;18916:2;18901:18;;18894:34;18848:2;18833:18;;18686:248;18489:85:51;;;;;;;;;;;;;18479:96;;;;;;18451:16;:134::i;:::-;:142;;:153::i;:::-;18631:11;;;;;-1:-1:-1;;;;;18631:11:51;;;18621:21;;;;17857:792;-1:-1:-1;;;;;;17857:792:51:o;9129:207::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;9307:22:::1;::::0;-1:-1:-1;;;9307:22:51;;9282:14;;-1:-1:-1;;;;;9307:16:51;::::1;::::0;::::1;::::0;:22:::1;::::0;9324:4;;9307:22:::1;;;:::i;7544:131::-:0;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;-1:-1:-1;;;;;7633:27:51;;;::::1;;::::0;;;:16:::1;:27;::::0;;;;:35;;-1:-1:-1;;7633:35:51::1;::::0;::::1;;::::0;;;::::1;::::0;;7544:131::o;15740:303::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;-1:-1:-1;;;;;15814:24:51;::::1;15810:60;;15847:23;;-1:-1:-1::0;;;15847:23:51::1;;;;;;;;;;;15810:60;15907:1;15884:11:::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;15884:11:51::1;:25:::0;15880:64:::1;;15918:26;;-1:-1:-1::0;;;15918:26:51::1;;;;;;;;;;;15880:64;15954:11;:24:::0;;-1:-1:-1;;;;;;15954:24:51::1;;-1:-1:-1::0;;;;;15954:24:51;::::1;;;::::0;;15988:22:::1;15997:12;:10;:12::i;:::-;15988:8;:22::i;:::-;16025:11;::::0;::::1;::::0;;;::::1;15740:303:::0;:::o;16509:99::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;16585:16:::1;16596:4;16585:16;;;;;;:::i;6969:223::-:0;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;7076:24:::1;::::0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;-1:-1:-1;;;;;7076:24:51;;::::1;7068:32:::0;;::::1;;7060:83;;;::::0;-1:-1:-1;;;7060:83:51;;19363:2:105;7060:83:51::1;::::0;::::1;19345:21:105::0;19402:2;19382:18;;;19375:30;19441:34;19421:18;;;19414:62;-1:-1:-1;;;19492:18:105;;;19485:36;19538:19;;7060:83:51::1;19161:402:105::0;7060:83:51::1;7153:24;::::0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:32;;-1:-1:-1;;7153:32:51::1;-1:-1:-1::0;;;;;7153:32:51;;::::1;::::0;;;::::1;::::0;;6969:223::o;12201:242::-;12329:17;;;12344:1;12329:17;;;;;;;;;12295:31;;12329:17;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;12329:17:51;;-1:-1:-1;;12329:17:51;;;;;;;;;;;12295:51;;12375:8;12356:13;12370:1;12356:16;;;;;;;;:::i;:::-;;;;;;:27;;;;12394:42;12411:13;12426:9;;12394:16;:42::i;4733:159::-;2917:35;2930:7;;-1:-1:-1;;;;;;2930:7:51;2939:12;:10;:12::i;2917:35::-;4824:1:::1;4801:11:::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;4801:11:51::1;4797:56;;4835:18;;-1:-1:-1::0;;;4835:18:51::1;;;;;;;;;;;4797:56;4863:22;4872:12;:10;:12::i;1217:93:100:-:0;1275:7;;;;1274:8;1266:37;;;;-1:-1:-1;;;1266:37:100;;19770:2:105;1266:37:100;;;19752:21:105;19809:2;19789:18;;;19782:30;-1:-1:-1;;;19828:18:105;;;19821:46;19884:18;;1266:37:100;19568:340:105;3142:315:51;3196:7;3232:10;3275:2;3256:8;:21;;;;:49;;-1:-1:-1;;;;;;3281:24:51;;;;;;:16;:24;;;;;;;;3256:49;3252:176;;;-1:-1:-1;;;3383:14:51;3379:23;3366:37;3362:2;3358:46;3252:176;3444:6;3142:315;-1:-1:-1;3142:315:51:o;2976:160::-;3054:14;;:37;;-1:-1:-1;;;3054:37:51;;-1:-1:-1;;;;;;20103:33:105;;3054:37:51;;;20085:52:105;-1:-1:-1;;;;;20173:32:105;;;20153:18;;;20146:60;3054:14:51;;;;:24;;20058:18:105;;3054:37:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3049:80;;3100:29;;-1:-1:-1;;;3100:29:51;;-1:-1:-1;;;;;20657:32:105;;3100:29:51;;;20639:51:105;-1:-1:-1;;;;;;20726:33:105;;20706:18;;;20699:61;20612:18;;3100:29:51;20467:299:105;3049:80:51;2976:160;;:::o;1836:123:100:-;1177:16;:14;:16::i;:::-;1909:7:::1;:14:::0;;-1:-1:-1;;1909:14:100::1;1919:4;1909:14;::::0;;1938::::1;::::0;-1:-1:-1;;;;;178:32:105;;160:51;;1938:14:100::1;::::0;148:2:105;133:18;1938:14:100::1;14:203:105::0;4339:165:37;4416:7;4442:55;4464:20;:18;:20::i;:::-;4486:10;9226:57:36;;-1:-1:-1;;;9226:57:36;;;21029:27:105;21072:11;;;21065:27;;;21108:12;;;21101:28;;;9190:7:36;;21145:12:105;;9226:57:36;;;;;;;;;;;;9216:68;;;;;;9209:75;;9097:194;;;;;4442:55:37;4435:62;4339:165;-1:-1:-1;;4339:165:37:o;4308:227:36:-;4386:7;4406:17;4425:18;4447:27;4458:4;4464:9;4447:10;:27::i;:::-;4405:69;;;;4484:18;4496:5;4484:11;:18::i;:::-;-1:-1:-1;4519:9:36;4308:227;-1:-1:-1;;;4308:227:36:o;2144:125:100:-;1520:13;:11;:13::i;:::-;2226:5:::1;2216:15:::0;;-1:-1:-1;;2216:15:100::1;::::0;;2246:16:::1;::::0;-1:-1:-1;;;;;178:32:105;;160:51;;2246:16:100::1;::::0;148:2:105;133:18;2246:16:100::1;14:203:105::0;3143:308:37;3196:7;3227:4;-1:-1:-1;;;;;3236:12:37;3219:29;;:66;;;;;3269:16;3252:13;:33;3219:66;3215:230;;;-1:-1:-1;3308:24:37;;3143:308::o;3215:230::-;-1:-1:-1;3633:73:37;;;3392:10;3633:73;;;;23427:25:105;;;;3404:12:37;23468:18:105;;;23461:34;3418:15:37;23511:18:105;;;23504:34;3677:13:37;23554:18:105;;;23547:34;3700:4:37;23597:19:105;;;;23590:61;;;;3633:73:37;;;;;;;;;;23399:19:105;;;;3633:73:37;;;3623:84;;;;;;3143:308::o;2243:1279:36:-;2324:7;2333:12;2554:9;:16;2574:2;2554:22;2550:966;;;2843:4;2828:20;;2822:27;2892:4;2877:20;;2871:27;2949:4;2934:20;;2928:27;2592:9;2920:36;2990:25;3001:4;2920:36;2822:27;2871;2990:10;:25::i;:::-;2983:32;;;;;;;;;2550:966;3036:9;:16;3056:2;3036:22;3032:484;;;3305:4;3290:20;;3284:27;3355:4;3340:20;;3334:27;3395:23;3406:4;3284:27;3334;3395:10;:23::i;:::-;3388:30;;;;;;;;3032:484;-1:-1:-1;3465:1:36;;-1:-1:-1;3469:35:36;3032:484;2243:1279;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:36;;21502:2:105;766:34:36;;;21484:21:105;21541:2;21521:18;;;21514:30;21580:26;21560:18;;;21553:54;21624:18;;766:34:36;21300:348:105;708:465:36;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:36;;21855:2:105;881:41:36;;;21837:21:105;21894:2;21874:18;;;21867:30;21933:33;21913:18;;;21906:61;21984:18;;881:41:36;21653:355:105;817:356:36;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:36;;22215:2:105;998:44:36;;;22197:21:105;22254:2;22234:18;;;22227:30;22293:34;22273:18;;;22266:62;-1:-1:-1;;;22344:18:105;;;22337:32;22386:19;;998:44:36;22013:398:105;939:234:36;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:36;;22618:2:105;1118:44:36;;;22600:21:105;22657:2;22637:18;;;22630:30;22696:34;22676:18;;;22669:62;-1:-1:-1;;;22747:18:105;;;22740:32;22789:19;;1118:44:36;22416:398:105;1059:114:36;548:631;:::o;1557:93:100:-;1611:7;;;;1603:40;;;;-1:-1:-1;;;1603:40:100;;23021:2:105;1603:40:100;;;23003:21:105;23060:2;23040:18;;;23033:30;-1:-1:-1;;;23079:18:105;;;23072:50;23139:18;;1603:40:100;22819:344:105;5716:1603:36;5842:7;;6766:66;6753:79;;6749:161;;;-1:-1:-1;6864:1:36;;-1:-1:-1;6868:30:36;6848:51;;6749:161;6923:1;:7;;6928:2;6923:7;;:18;;;;;6934:1;:7;;6939:2;6934:7;;6923:18;6919:100;;;-1:-1:-1;6973:1:36;;-1:-1:-1;6977:30:36;6957:51;;6919:100;7130:24;;;7113:14;7130:24;;;;;;;;;23889:25:105;;;23962:4;23950:17;;23930:18;;;23923:45;;;;23984:18;;;23977:34;;;24027:18;;;24020:34;;;7130:24:36;;23861:19:105;;7130:24:36;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7130:24:36;;-1:-1:-1;;7130:24:36;;;-1:-1:-1;;;;;;;7168:20:36;;7164:101;;7220:1;7224:29;7204:50;;;;;;;7164:101;7283:6;-1:-1:-1;7291:20:36;;-1:-1:-1;5716:1603:36;;;;;;;;:::o;4789:336::-;4899:7;;-1:-1:-1;;;;;4944:80:36;;4899:7;5050:25;5066:3;5051:18;;;5073:2;5050:25;:::i;:::-;5034:42;;5093:25;5104:4;5110:1;5113;5116;5093:10;:25::i;:::-;5086:32;;;;;;4789:336;;;;;;:::o;222:156:105:-;288:20;;348:4;337:16;;327:27;;317:55;;368:1;365;358:12;383:250;449:6;457;510:2;498:9;489:7;485:23;481:32;478:52;;;526:1;523;516:12;478:52;549:27;566:9;549:27;:::i;:::-;539:37;623:2;608:18;;;;595:32;;-1:-1:-1;;;383:250:105:o;820:127::-;881:10;876:3;872:20;869:1;862:31;912:4;909:1;902:15;936:4;933:1;926:15;952:275;1023:2;1017:9;1088:2;1069:13;;-1:-1:-1;;1065:27:105;1053:40;;-1:-1:-1;;;;;1108:34:105;;1144:22;;;1105:62;1102:88;;;1170:18;;:::i;:::-;1206:2;1199:22;952:275;;-1:-1:-1;952:275:105:o;1232:171::-;1299:20;;-1:-1:-1;;;;;1348:30:105;;1338:41;;1328:69;;1393:1;1390;1383:12;1408:186;1456:4;-1:-1:-1;;;;;1481:6:105;1478:30;1475:56;;;1511:18;;:::i;:::-;-1:-1:-1;1577:2:105;1556:15;-1:-1:-1;;1552:29:105;1583:4;1548:40;;1408:186::o;1599:336::-;1663:5;1692:52;1708:35;1736:6;1708:35;:::i;:::-;1692:52;:::i;:::-;1683:61;;1767:6;1760:5;1753:21;1807:3;1798:6;1793:3;1789:16;1786:25;1783:45;;;1824:1;1821;1814:12;1783:45;1873:6;1868:3;1861:4;1854:5;1850:16;1837:43;1927:1;1920:4;1911:6;1904:5;1900:18;1896:29;1889:40;1599:336;;;;;:::o;1940:220::-;1982:5;2035:3;2028:4;2020:6;2016:17;2012:27;2002:55;;2053:1;2050;2043:12;2002:55;2075:79;2150:3;2141:6;2128:20;2121:4;2113:6;2109:17;2075:79;:::i;:::-;2066:88;1940:220;-1:-1:-1;;;1940:220:105:o;2165:746::-;2220:5;2268:4;2256:9;2251:3;2247:19;2243:30;2240:50;;;2286:1;2283;2276:12;2240:50;2319:2;2313:9;2361:4;2353:6;2349:17;-1:-1:-1;;;;;2453:6:105;2441:10;2438:22;2433:2;2421:10;2418:18;2415:46;2412:72;;;2464:18;;:::i;:::-;2504:10;2500:2;2493:22;2533:6;2524:15;;2563:27;2580:9;2563:27;:::i;:::-;2555:6;2548:43;2624:37;2657:2;2646:9;2642:18;2624:37;:::i;:::-;2619:2;2611:6;2607:15;2600:62;2723:2;2712:9;2708:18;2695:32;2690:2;2682:6;2678:15;2671:57;2779:2;2768:9;2764:18;2751:32;2737:46;;2806:2;2798:6;2795:14;2792:34;;;2822:1;2819;2812:12;2792:34;;2859:45;2900:3;2891:6;2880:9;2876:22;2859:45;:::i;:::-;2854:2;2846:6;2842:15;2835:70;;;2165:746;;;;:::o;2916:347::-;2967:8;2977:6;3031:3;3024:4;3016:6;3012:17;3008:27;2998:55;;3049:1;3046;3039:12;2998:55;-1:-1:-1;3072:20:105;;-1:-1:-1;;;;;3104:30:105;;3101:50;;;3147:1;3144;3137:12;3101:50;3184:4;3176:6;3172:17;3160:29;;3236:3;3229:4;3220:6;3212;3208:19;3204:30;3201:39;3198:59;;;3253:1;3250;3243:12;3268:1481;3398:6;3406;3414;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;3523:9;3510:23;-1:-1:-1;;;;;3593:2:105;3585:6;3582:14;3579:34;;;3609:1;3606;3599:12;3579:34;3647:6;3636:9;3632:22;3622:32;;3692:7;3685:4;3681:2;3677:13;3673:27;3663:55;;3714:1;3711;3704:12;3663:55;3750:2;3737:16;3772:4;3795:2;3791;3788:10;3785:36;;;3801:18;;:::i;:::-;3847:2;3844:1;3840:10;3870:28;3894:2;3890;3886:11;3870:28;:::i;:::-;3932:15;;;4002:11;;;3998:20;;;3963:12;;;;4030:19;;;4027:39;;;4062:1;4059;4052:12;4027:39;4094:2;4090;4086:11;4075:22;;4106:362;4122:6;4117:3;4114:15;4106:362;;;4208:3;4195:17;4244:2;4231:11;4228:19;4225:109;;;4288:1;4317:2;4313;4306:14;4225:109;4359:66;4417:7;4412:2;4398:11;4394:2;4390:20;4386:29;4359:66;:::i;:::-;4347:79;;-1:-1:-1;4139:12:105;;;;4446;;;;4106:362;;;4487:5;-1:-1:-1;;;4530:18:105;;4517:32;;-1:-1:-1;;4561:16:105;;;4558:36;;;4590:1;4587;4580:12;4558:36;;4629:60;4681:7;4670:8;4659:9;4655:24;4629:60;:::i;:::-;3268:1481;;4708:8;;-1:-1:-1;4603:86:105;;-1:-1:-1;;;;3268:1481:105:o;4754:450::-;4823:6;4876:2;4864:9;4855:7;4851:23;4847:32;4844:52;;;4892:1;4889;4882:12;4844:52;4932:9;4919:23;-1:-1:-1;;;;;4957:6:105;4954:30;4951:50;;;4997:1;4994;4987:12;4951:50;5020:22;;5073:4;5065:13;;5061:27;-1:-1:-1;5051:55:105;;5102:1;5099;5092:12;5051:55;5125:73;5190:7;5185:2;5172:16;5167:2;5163;5159:11;5125:73;:::i;:::-;5115:83;4754:450;-1:-1:-1;;;;4754:450:105:o;5451:182::-;5508:6;5561:2;5549:9;5540:7;5536:23;5532:32;5529:52;;;5577:1;5574;5567:12;5529:52;5600:27;5617:9;5600:27;:::i;6035:856::-;6141:6;6149;6157;6165;6173;6181;6234:3;6222:9;6213:7;6209:23;6205:33;6202:53;;;6251:1;6248;6241:12;6202:53;6274:27;6291:9;6274:27;:::i;:::-;6264:37;;6348:2;6337:9;6333:18;6320:32;6310:42;;6403:2;6392:9;6388:18;6375:32;-1:-1:-1;;;;;6467:2:105;6459:6;6456:14;6453:34;;;6483:1;6480;6473:12;6453:34;6522:58;6572:7;6563:6;6552:9;6548:22;6522:58;:::i;:::-;6599:8;;-1:-1:-1;6496:84:105;-1:-1:-1;6687:2:105;6672:18;;6659:32;;-1:-1:-1;6703:16:105;;;6700:36;;;6732:1;6729;6722:12;6700:36;;6771:60;6823:7;6812:8;6801:9;6797:24;6771:60;:::i;:::-;6035:856;;;;-1:-1:-1;6035:856:105;;-1:-1:-1;6035:856:105;;6850:8;;6035:856;-1:-1:-1;;;6035:856:105:o;6896:258::-;6968:1;6978:113;6992:6;6989:1;6986:13;6978:113;;;7068:11;;;7062:18;7049:11;;;7042:39;7014:2;7007:10;6978:113;;;7109:6;7106:1;7103:13;7100:48;;;-1:-1:-1;;7144:1:105;7126:16;;7119:27;6896:258::o;7159:257::-;7200:3;7238:5;7232:12;7265:6;7260:3;7253:19;7281:63;7337:6;7330:4;7325:3;7321:14;7314:4;7307:5;7303:16;7281:63;:::i;:::-;7398:2;7377:15;-1:-1:-1;;7373:29:105;7364:39;;;;7405:4;7360:50;;7159:257;-1:-1:-1;;7159:257:105:o;7421:311::-;-1:-1:-1;;;;;7598:6:105;7594:31;7583:9;7576:50;7662:2;7657;7646:9;7642:18;7635:30;7557:4;7682:44;7722:2;7711:9;7707:18;7699:6;7682:44;:::i;7737:180::-;7796:6;7849:2;7837:9;7828:7;7824:23;7820:32;7817:52;;;7865:1;7862;7855:12;7817:52;-1:-1:-1;7888:23:105;;7737:180;-1:-1:-1;7737:180:105:o;7922:173::-;7990:20;;-1:-1:-1;;;;;8039:31:105;;8029:42;;8019:70;;8085:1;8082;8075:12;8100:626;8197:6;8205;8213;8221;8229;8282:3;8270:9;8261:7;8257:23;8253:33;8250:53;;;8299:1;8296;8289:12;8250:53;8322:29;8341:9;8322:29;:::i;:::-;8312:39;;8398:2;8387:9;8383:18;8370:32;8360:42;;8421:38;8455:2;8444:9;8440:18;8421:38;:::i;:::-;8411:48;;8510:2;8499:9;8495:18;8482:32;-1:-1:-1;;;;;8529:6:105;8526:30;8523:50;;;8569:1;8566;8559:12;8523:50;8608:58;8658:7;8649:6;8638:9;8634:22;8608:58;:::i;:::-;8100:626;;;;-1:-1:-1;8100:626:105;;-1:-1:-1;8685:8:105;;8582:84;8100:626;-1:-1:-1;;;8100:626:105:o;8731:186::-;8790:6;8843:2;8831:9;8822:7;8818:23;8814:32;8811:52;;;8859:1;8856;8849:12;8811:52;8882:29;8901:9;8882:29;:::i;8922:260::-;8990:6;8998;9051:2;9039:9;9030:7;9026:23;9022:32;9019:52;;;9067:1;9064;9057:12;9019:52;9090:29;9109:9;9090:29;:::i;:::-;9080:39;;9138:38;9172:2;9161:9;9157:18;9138:38;:::i;:::-;9128:48;;8922:260;;;;;:::o;9376:394::-;9453:6;9461;9514:2;9502:9;9493:7;9489:23;9485:32;9482:52;;;9530:1;9527;9520:12;9482:52;9553:29;9572:9;9553:29;:::i;:::-;9543:39;;9633:2;9622:9;9618:18;9605:32;-1:-1:-1;;;;;9652:6:105;9649:30;9646:50;;;9692:1;9689;9682:12;9646:50;9715:49;9756:7;9747:6;9736:9;9732:22;9715:49;:::i;:::-;9705:59;;;9376:394;;;;;:::o;9775:118::-;9861:5;9854:13;9847:21;9840:5;9837:32;9827:60;;9883:1;9880;9873:12;9898:315;9963:6;9971;10024:2;10012:9;10003:7;9999:23;9995:32;9992:52;;;10040:1;10037;10030:12;9992:52;10063:29;10082:9;10063:29;:::i;:::-;10053:39;;10142:2;10131:9;10127:18;10114:32;10155:28;10177:5;10155:28;:::i;:::-;10202:5;10192:15;;;9898:315;;;;;:::o;10218:254::-;10283:6;10291;10344:2;10332:9;10323:7;10319:23;10315:32;10312:52;;;10360:1;10357;10350:12;10312:52;10383:27;10400:9;10383:27;:::i;:::-;10373:37;;10429;10462:2;10451:9;10447:18;10429:37;:::i;10477:655::-;10582:6;10590;10598;10651:2;10639:9;10630:7;10626:23;10622:32;10619:52;;;10667:1;10664;10657:12;10619:52;10707:9;10694:23;-1:-1:-1;;;;;10777:2:105;10769:6;10766:14;10763:34;;;10793:1;10790;10783:12;10763:34;10816:59;10867:7;10858:6;10847:9;10843:22;10816:59;:::i;:::-;10806:69;;10928:2;10917:9;10913:18;10900:32;10884:48;;10957:2;10947:8;10944:16;10941:36;;;10973:1;10970;10963:12;11366:127;11427:10;11422:3;11418:20;11415:1;11408:31;11458:4;11455:1;11448:15;11482:4;11479:1;11472:15;11498:395;11710:26;11706:31;11697:6;11693:2;11689:15;11685:53;11680:3;11673:66;11655:3;11768:6;11762:13;11784:62;11839:6;11834:2;11829:3;11825:12;11818:4;11810:6;11806:17;11784:62;:::i;:::-;11866:16;;;;11884:2;11862:25;;11498:395;-1:-1:-1;;;11498:395:105:o;11898:127::-;11959:10;11954:3;11950:20;11947:1;11940:31;11990:4;11987:1;11980:15;12014:4;12011:1;12004:15;12030:191;12061:1;-1:-1:-1;;;;;12132:2:105;12129:1;12125:10;12154:3;12144:37;;12161:18;;:::i;:::-;12199:10;;12195:20;;;;;12030:191;-1:-1:-1;;12030:191:105:o;12226:127::-;12287:10;12282:3;12278:20;12275:1;12268:31;12318:4;12315:1;12308:15;12342:4;12339:1;12332:15;12358:199;12397:1;-1:-1:-1;;;;;12468:2:105;12465:1;12461:10;12490:3;12480:37;;12497:18;;:::i;:::-;12535:10;;12531:20;;;;;12358:199;-1:-1:-1;;12358:199:105:o;12562:288::-;12737:6;12726:9;12719:25;12780:2;12775;12764:9;12760:18;12753:30;12700:4;12800:44;12840:2;12829:9;12825:18;12817:6;12800:44;:::i;12855:634::-;12934:6;12987:2;12975:9;12966:7;12962:23;12958:32;12955:52;;;13003:1;13000;12993:12;12955:52;13036:9;13030:16;-1:-1:-1;;;;;13061:6:105;13058:30;13055:50;;;13101:1;13098;13091:12;13055:50;13124:22;;13177:4;13169:13;;13165:27;-1:-1:-1;13155:55:105;;13206:1;13203;13196:12;13155:55;13235:2;13229:9;13260:48;13276:31;13304:2;13276:31;:::i;13260:48::-;13331:2;13324:5;13317:17;13371:7;13366:2;13361;13357;13353:11;13349:20;13346:33;13343:53;;;13392:1;13389;13382:12;13343:53;13405:54;13456:2;13451;13444:5;13440:14;13435:2;13431;13427:11;13405:54;:::i;:::-;13478:5;12855:634;-1:-1:-1;;;;;12855:634:105:o;13494:389::-;13691:2;13680:9;13673:21;13654:4;13711:44;13751:2;13740:9;13736:18;13728:6;13711:44;:::i;:::-;13703:52;;13803:4;13795:6;13791:17;13786:2;13775:9;13771:18;13764:45;-1:-1:-1;;;;;13849:6:105;13845:31;13840:2;13829:9;13825:18;13818:59;13494:389;;;;;;:::o;13888:462::-;14125:4;14117:6;14113:17;14102:9;14095:36;-1:-1:-1;;;;;14171:6:105;14167:31;14162:2;14151:9;14147:18;14140:59;14235:6;14230:2;14219:9;14215:18;14208:34;14278:3;14273:2;14262:9;14258:18;14251:31;14076:4;14299:45;14339:3;14328:9;14324:19;14316:6;14299:45;:::i;:::-;14291:53;13888:462;-1:-1:-1;;;;;;13888:462:105:o;14355:135::-;14394:3;-1:-1:-1;;14415:17:105;;14412:43;;;14435:18;;:::i;:::-;-1:-1:-1;14482:1:105;14471:13;;14355:135::o;14495:219::-;14644:2;14633:9;14626:21;14607:4;14664:44;14704:2;14693:9;14689:18;14681:6;14664:44;:::i;15077:266::-;15165:6;15160:3;15153:19;15217:6;15210:5;15203:4;15198:3;15194:14;15181:43;-1:-1:-1;15269:1:105;15244:16;;;15262:4;15240:27;;;15233:38;;;;15325:2;15304:15;;;-1:-1:-1;;15300:29:105;15291:39;;;15287:50;;15077:266::o;15348:759::-;15694:1;15690;15685:3;15681:11;15677:19;15669:6;15665:32;15654:9;15647:51;15746:4;15738:6;15734:17;15729:2;15718:9;15714:18;15707:45;15800:4;15792:6;15788:17;15783:2;15772:9;15768:18;15761:45;15842:6;15837:2;15826:9;15822:18;15815:34;15886:3;15880;15869:9;15865:19;15858:32;15628:4;15913:62;15970:3;15959:9;15955:19;15947:6;15939;15913:62;:::i;:::-;16024:9;16016:6;16012:22;16006:3;15995:9;15991:19;15984:51;16052:49;16094:6;16086;16078;16052:49;:::i;:::-;16044:57;15348:759;-1:-1:-1;;;;;;;;;;;15348:759:105:o;16112:209::-;16150:3;-1:-1:-1;;;;;16231:2:105;16224:5;16220:14;16258:2;16249:7;16246:15;16243:41;;;16264:18;;:::i;:::-;16313:1;16300:15;;16112:209;-1:-1:-1;;;16112:209:105:o;16326:412::-;16521:25;;;-1:-1:-1;;;;;16582:32:105;;16577:2;16562:18;;16555:60;16651:2;16646;16631:18;;16624:30;;;-1:-1:-1;;16671:61:105;;16713:18;;16705:6;16697;16671:61;:::i;16743:650::-;17036:4;17028:6;17024:17;17013:9;17006:36;17078:6;17073:2;17062:9;17058:18;17051:34;-1:-1:-1;;;;;17125:6:105;17121:31;17116:2;17105:9;17101:18;17094:59;17189:3;17184:2;17173:9;17169:18;17162:31;16987:4;17216:62;17273:3;17262:9;17258:19;17250:6;17242;17216:62;:::i;:::-;17327:9;17319:6;17315:22;17309:3;17298:9;17294:19;17287:51;17355:32;17380:6;17372;17355:32;:::i;:::-;17347:40;16743:650;-1:-1:-1;;;;;;;;;16743:650:105:o;17398:112::-;17430:1;17456;17446:35;;17461:18;;:::i;:::-;-1:-1:-1;17495:9:105;;17398:112::o;17515:120::-;17555:1;17581;17571:35;;17586:18;;:::i;:::-;-1:-1:-1;17620:9:105;;17515:120::o;18138:543::-;18356:13;;18299:3;;18330;;18409:4;18436:15;;;18299:3;18479:175;18493:6;18490:1;18487:13;18479:175;;;18556:13;;18542:28;;18592:14;;;;18629:15;;;;18515:1;18508:9;18479:175;;;-1:-1:-1;18670:5:105;;18138:543;-1:-1:-1;;;;;;18138:543:105:o;20217:245::-;20284:6;20337:2;20325:9;20316:7;20312:23;20308:32;20305:52;;;20353:1;20350;20343:12;20305:52;20385:9;20379:16;20404:28;20426:5;20404:28;:::i;21168:127::-;21229:10;21224:3;21220:20;21217:1;21210:31;21260:4;21257:1;21250:15;21284:4;21281:1;21274:15;24065:128;24105:3;24136:1;24132:6;24129:1;24126:13;24123:39;;;24142:18;;:::i;:::-;-1:-1:-1;24178:9:105;;24065:128::o",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.8.11;\n\nimport \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport \"@openzeppelin/contracts/utils/Context.sol\";\nimport \"@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol\";\nimport \"./utils/Pausable.sol\";\n\n\nimport \"./interfaces/IERCHandler.sol\";\nimport \"./interfaces/IHandler.sol\";\nimport \"./interfaces/IFeeHandler.sol\";\nimport \"./interfaces/IAccessControlSegregator.sol\";\n\n/**\n    @title Facilitates deposits and creation of deposit proposals, and deposit executions.\n    @author ChainSafe Systems.\n */\ncontract Bridge is Pausable, Context, EIP712 {\n    using ECDSA for bytes32;\n\n    bytes32 private constant _PROPOSALS_TYPEHASH =\n        keccak256(\"Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\");\n    bytes32 private constant _PROPOSAL_TYPEHASH =\n        keccak256(\"Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\");\n\n\n    uint8   public immutable _domainID;\n    address public _MPCAddress;\n\n    IFeeHandler public _feeHandler;\n\n    IAccessControlSegregator public _accessControl;\n\n    struct Proposal {\n        uint8   originDomainID;\n        uint64  depositNonce;\n        bytes32 resourceID;\n        bytes   data;\n    }\n\n    // destinationDomainID => number of deposits\n    mapping(uint8 => uint64) public _depositCounts;\n    // resourceID => handler address\n    mapping(bytes32 => address) public _resourceIDToHandlerAddress;\n    // forwarder address => is Valid\n    mapping(address => bool) public isValidForwarder;\n    // origin domainID => nonces set => used deposit nonces\n    mapping(uint8 => mapping(uint256 => uint256)) public usedNonces;\n\n    event FeeHandlerChanged(address newFeeHandler);\n    event AccessControlChanged(address newAccessControl);\n    event Deposit(\n        uint8   destinationDomainID,\n        bytes32 resourceID,\n        uint64  depositNonce,\n        address indexed user,\n        bytes   data,\n        bytes   handlerResponse\n    );\n    event ProposalExecution(\n        uint8   originDomainID,\n        uint64  depositNonce,\n        bytes32 dataHash,\n        bytes handlerResponse\n    );\n\n    event FailedHandlerExecution(\n        bytes  lowLevelData,\n        uint8  originDomainID,\n        uint64 depositNonce\n    );\n\n    event StartKeygen();\n\n    event EndKeygen();\n\n    event KeyRefresh(string hash);\n\n    event Retry(string txHash);\n\n    error AccessNotAllowed(address sender, bytes4 funcSig);\n\n    error ResourceIDNotMappedToHandler();\n\n    error DepositToCurrentDomain();\n\n    error InvalidProposalSigner();\n\n    error EmptyProposalsArray();\n\n    error NonceDecrementsNotAllowed();\n\n    error MPCAddressAlreadySet();\n\n    error MPCAddressNotSet();\n\n    error MPCAddressIsNotUpdatable();\n\n    error MPCAddressZeroAddress();\n\n    modifier onlyAllowed() {\n        _onlyAllowed(msg.sig, _msgSender());\n        _;\n    }\n\n    function _onlyAllowed(bytes4 sig, address sender) private view {\n        if (!_accessControl.hasAccess(sig, sender)) revert AccessNotAllowed(sender, sig);\n    }\n\n    function _msgSender() internal override view returns (address) {\n        address signer = msg.sender;\n        if (msg.data.length >= 20 && isValidForwarder[signer]) {\n            assembly {\n                signer := shr(96, calldataload(sub(calldatasize(), 20)))\n            }\n        }\n        return signer;\n    }\n\n    /**\n        @notice Initializes Bridge, creates and grants {_msgSender()} the admin role, sets access control\n        contract for bridge and sets the inital state of the Bridge to paused.\n        @param domainID ID of chain the Bridge contract exists on.\n        @param accessControl Address of access control contract.\n     */\n    constructor (uint8 domainID, address accessControl) EIP712(\"Bridge\", \"3.1.0\") {\n        _domainID = domainID;\n        _accessControl = IAccessControlSegregator(accessControl);\n\n        _pause(_msgSender());\n    }\n\n    /**\n        @notice Pauses deposits, proposal creation and voting, and deposit executions.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n     */\n    function adminPauseTransfers() external onlyAllowed {\n        _pause(_msgSender());\n    }\n\n    /**\n        @notice Unpauses deposits, proposal creation and voting, and deposit executions.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @notice MPC address has to be set before Bridge can be unpaused\n     */\n    function adminUnpauseTransfers() external onlyAllowed {\n        if (_MPCAddress == address(0)) revert MPCAddressNotSet();\n        _unpause(_msgSender());\n    }\n\n    /**\n        @notice Sets a new resource for handler contracts that use the IERCHandler interface,\n        and maps the {handlerAddress} to {resourceID} in {_resourceIDToHandlerAddress}.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param handlerAddress Address of handler resource will be set for.\n        @param resourceID ResourceID to be used when making deposits.\n        @param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n        @param args Additional data to be passed to specified handler.\n     */\n    function adminSetResource(address handlerAddress, bytes32 resourceID, address contractAddress, bytes calldata args) external onlyAllowed {\n        _resourceIDToHandlerAddress[resourceID] = handlerAddress;\n        IHandler handler = IHandler(handlerAddress);\n        handler.setResource(resourceID, contractAddress, args);\n    }\n\n    /**\n        @notice Sets a resource as burnable for handler contracts that use the IERCHandler interface.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param handlerAddress Address of handler resource will be set for.\n        @param tokenAddress Address of contract to be called when a deposit is made and a deposited is executed.\n     */\n    function adminSetBurnable(address handlerAddress, address tokenAddress) external onlyAllowed {\n        IERCHandler handler = IERCHandler(handlerAddress);\n        handler.setBurnable(tokenAddress);\n    }\n\n    /**\n        @notice Sets the nonce for the specific domainID.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param domainID Domain ID for increasing nonce.\n        @param nonce The nonce value to be set.\n     */\n    function adminSetDepositNonce(uint8 domainID, uint64 nonce) external onlyAllowed {\n        require(nonce > _depositCounts[domainID], \"Does not allow decrements of the nonce\");\n        _depositCounts[domainID] = nonce;\n    }\n\n    /**\n        @notice Set a forwarder to be used.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param forwarder Forwarder address to be added.\n        @param valid Decision for the specific forwarder.\n     */\n    function adminSetForwarder(address forwarder, bool valid) external onlyAllowed {\n        isValidForwarder[forwarder] = valid;\n    }\n\n    /**\n        @notice Changes access control contract address.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param newAccessControl Address {_accessControl} will be updated to.\n     */\n    function adminChangeAccessControl(address newAccessControl) external onlyAllowed {\n        _accessControl = IAccessControlSegregator(newAccessControl);\n        emit AccessControlChanged(newAccessControl);\n    }\n\n    /**\n        @notice Changes deposit fee handler contract address.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param newFeeHandler Address {_feeHandler} will be updated to.\n     */\n    function adminChangeFeeHandler(address newFeeHandler) external onlyAllowed {\n        _feeHandler = IFeeHandler(newFeeHandler);\n        emit FeeHandlerChanged(newFeeHandler);\n    }\n\n    /**\n        @notice Used to manually withdraw funds from ERC safes.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param handlerAddress Address of handler to withdraw from.\n        @param data ABI-encoded withdrawal params relevant to the specified handler.\n     */\n    function adminWithdraw(\n        address handlerAddress,\n        bytes memory data\n    ) external onlyAllowed {\n        IERCHandler handler = IERCHandler(handlerAddress);\n        handler.withdraw(data);\n    }\n\n    /**\n        @notice Initiates a transfer using a specified handler contract.\n        @notice Only callable when Bridge is not paused.\n        @param destinationDomainID ID of chain deposit will be bridged to.\n        @param resourceID ResourceID used to find address of handler to be used for deposit.\n        @param depositData Additional data to be passed to specified handler.\n        @param feeData Additional data to be passed to the fee handler.\n        @notice Emits {Deposit} event with all necessary parameters and a handler response.\n        @return depositNonce deposit nonce for the destination domain.\n        @return handlerResponse a handler response:\n        - ERC20Handler: responds with an empty data.\n        - ERC721Handler: responds with the deposited token metadata acquired by calling a tokenURI method in the token contract.\n        - GmpHandler: responds with an empty data.\n     */\n    function deposit(uint8 destinationDomainID, bytes32 resourceID, bytes calldata depositData, bytes calldata feeData)\n        external payable whenNotPaused\n        returns (uint64 depositNonce, bytes memory handlerResponse) {\n        if (destinationDomainID == _domainID) revert DepositToCurrentDomain();\n\n        address sender = _msgSender();\n        if (address(_feeHandler) == address(0)) {\n            require(msg.value == 0, \"no FeeHandler, msg.value != 0\");\n        } else {\n            // Reverts on failure\n            _feeHandler.collectFee{value: msg.value}(sender, _domainID, destinationDomainID, resourceID, depositData, feeData);\n        }\n        address handler = _resourceIDToHandlerAddress[resourceID];\n        if (handler == address(0)) revert ResourceIDNotMappedToHandler();\n\n        depositNonce = ++_depositCounts[destinationDomainID];\n\n        IHandler depositHandler = IHandler(handler);\n        handlerResponse = depositHandler.deposit(resourceID, sender, depositData);\n\n        emit Deposit(destinationDomainID, resourceID, depositNonce, sender, depositData, handlerResponse);\n        return (depositNonce, handlerResponse);\n    }\n\n    /**\n        @notice Executes a deposit proposal using a specified handler contract (only if signature is signed by MPC).\n        @notice Failed executeProposal from handler don't revert, emits {FailedHandlerExecution} event.\n        @param proposal Proposal which consists of:\n        - originDomainID ID of chain deposit originated from.\n        - resourceID ResourceID to be used when making deposits.\n        - depositNonce ID of deposit generated by origin Bridge contract.\n        - data Data originally provided when deposit was made.\n        @param signature bytes memory signature composed of MPC key shares\n        @notice Emits {ProposalExecution} event.\n        @notice For ERC handlers, when execution fails, the handler will terminate the function with revert.\n     */\n    function executeProposal(Proposal memory proposal, bytes calldata signature) public {\n        Proposal[] memory proposalArray = new Proposal[](1);\n        proposalArray[0] = proposal;\n\n        executeProposals(proposalArray, signature);\n    }\n\n    /**\n        @notice Executes a batch of deposit proposals using a specified handler contract for each proposal (only if signature is signed by MPC).\n        @notice If executeProposals fails it doesn't revert, emits {FailedHandlerExecution} event.\n        @param proposals Array of Proposal which consists of:\n        - originDomainID ID of chain deposit originated from.\n        - resourceID ResourceID to be used when making deposits.\n        - depositNonce ID of deposit generated by origin Bridge contract.\n        - data Data originally provided when deposit was made.\n        @param signature bytes memory signature for the whole array composed of MPC key shares\n        @notice Emits {ProposalExecution} event for each proposal in the batch.\n        @notice For ERC handlers, when execution fails, the handler will terminate the function with revert.\n     */\n    function executeProposals(Proposal[] memory proposals, bytes calldata signature) public whenNotPaused {\n        if (proposals.length == 0) revert EmptyProposalsArray();\n        if (!verify(proposals, signature)) revert InvalidProposalSigner();\n\n        for (uint256 i = 0; i < proposals.length; i++) {\n            if(isProposalExecuted(proposals[i].originDomainID, proposals[i].depositNonce)) {\n                continue;\n            }\n\n            address handler = _resourceIDToHandlerAddress[proposals[i].resourceID];\n            bytes32 dataHash = keccak256(abi.encodePacked(handler, proposals[i].data));\n\n            IHandler depositHandler = IHandler(handler);\n\n            usedNonces[proposals[i].originDomainID][proposals[i].depositNonce / 256] |= 1 << (proposals[i].depositNonce % 256);\n\n            try depositHandler.executeProposal(proposals[i].resourceID, proposals[i].data) returns (bytes memory handlerResponse) {\n                emit ProposalExecution(proposals[i].originDomainID, proposals[i].depositNonce, dataHash, handlerResponse);\n            } catch (bytes memory lowLevelData) {\n                emit FailedHandlerExecution(lowLevelData, proposals[i].originDomainID, proposals[i].depositNonce);\n                usedNonces[proposals[i].originDomainID][proposals[i].depositNonce / 256] &= ~(1 << (proposals[i].depositNonce % 256));\n                continue;\n            }\n        }\n    }\n\n    /**\n        @notice Once MPC address is set, this method can't be invoked anymore.\n        It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n     */\n    function startKeygen() external onlyAllowed {\n        if (_MPCAddress != address(0)) revert MPCAddressAlreadySet();\n        emit StartKeygen();\n    }\n\n    /**\n        @notice This method can be called only once, after the MPC address is set Bridge is unpaused.\n        It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param MPCAddress Address that will be set as MPC address.\n     */\n    function endKeygen(address MPCAddress) external onlyAllowed {\n        if( MPCAddress == address(0)) revert MPCAddressZeroAddress();\n        if (_MPCAddress != address(0)) revert MPCAddressIsNotUpdatable();\n        _MPCAddress = MPCAddress;\n        _unpause(_msgSender());\n        emit EndKeygen();\n    }\n\n    /**\n        @notice It's used to trigger the belonging process on the MPC side.\n        It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param hash Topology hash which prevents changes during refresh process.\n     */\n    function refreshKey(string memory hash) external onlyAllowed {\n        emit KeyRefresh(hash);\n    }\n\n    /**\n        @notice This method is used to trigger the process for retrying failed deposits on the MPC side.\n        @notice Only callable by address that has the right to call the specific function,\n        which is mapped in {functionAccess} in AccessControlSegregator contract.\n        @param txHash Transaction hash which contains deposit that should be retried\n     */\n    function retry(string memory txHash) external onlyAllowed {\n        emit Retry(txHash);\n    }\n\n    /**\n        @notice Returns a boolean value.\n        @param domainID ID of chain deposit originated from.\n        @param depositNonce ID of deposit generated by origin Bridge contract.\n        @return Boolean value depending if deposit nonce has already been used or not.\n     */\n    function isProposalExecuted(uint8 domainID, uint256 depositNonce) public view returns (bool) {\n        return usedNonces[domainID][depositNonce / 256] & (1 << (depositNonce % 256)) != 0;\n    }\n\n    /**\n        @notice Verifies that proposal data is signed by MPC address.\n        @param proposals array of Proposals.\n        @param signature signature bytes memory signature composed of MPC key shares.\n        @return Boolean value depending if signer is vaild or not.\n     */\n    function verify(Proposal[] memory proposals, bytes calldata signature) public view returns (bool) {\n        bytes32[] memory keccakData = new bytes32[](proposals.length);\n        for (uint256 i = 0; i < proposals.length; i++) {\n            keccakData[i] = keccak256(\n                abi.encode(\n                    _PROPOSAL_TYPEHASH,\n                    proposals[i].originDomainID,\n                    proposals[i].depositNonce,\n                    proposals[i].resourceID,\n                    keccak256(proposals[i].data)\n                )\n            );\n        }\n\n        address signer = _hashTypedDataV4(\n          keccak256(abi.encode(\n            _PROPOSALS_TYPEHASH, keccak256(abi.encodePacked(keccakData))))\n        ).recover(signature);\n        return signer == _MPCAddress;\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/Bridge.sol",
  "ast": {
    "absolutePath": "project:/contracts/Bridge.sol",
    "exportedSymbols": {
      "Bridge": [
        8866
      ],
      "Context": [
        5305
      ],
      "ECDSA": [
        5989
      ],
      "EIP712": [
        6143
      ],
      "IAccessControlSegregator": [
        18093
      ],
      "IERCHandler": [
        18195
      ],
      "IFeeHandler": [
        18265
      ],
      "IHandler": [
        18301
      ],
      "Pausable": [
        19105
      ],
      "Strings": [
        5582
      ]
    },
    "id": 8867,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7900,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:51"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "id": 7901,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 5990,
        "src": "106:62:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
        "file": "@openzeppelin/contracts/utils/Context.sol",
        "id": 7902,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 5306,
        "src": "169:51:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol",
        "file": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol",
        "id": 7903,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 6144,
        "src": "221:69:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/Pausable.sol",
        "file": "./utils/Pausable.sol",
        "id": 7904,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 19106,
        "src": "291:30:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
        "file": "./interfaces/IERCHandler.sol",
        "id": 7905,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18196,
        "src": "324:38:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "./interfaces/IHandler.sol",
        "id": 7906,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18302,
        "src": "363:35:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IFeeHandler.sol",
        "file": "./interfaces/IFeeHandler.sol",
        "id": 7907,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18266,
        "src": "399:38:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IAccessControlSegregator.sol",
        "file": "./interfaces/IAccessControlSegregator.sol",
        "id": 7908,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18094,
        "src": "438:51:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7910,
              "name": "Pausable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19105,
              "src": "640:8:51"
            },
            "id": 7911,
            "nodeType": "InheritanceSpecifier",
            "src": "640:8:51"
          },
          {
            "baseName": {
              "id": 7912,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5305,
              "src": "650:7:51"
            },
            "id": 7913,
            "nodeType": "InheritanceSpecifier",
            "src": "650:7:51"
          },
          {
            "baseName": {
              "id": 7914,
              "name": "EIP712",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 6143,
              "src": "659:6:51"
            },
            "id": 7915,
            "nodeType": "InheritanceSpecifier",
            "src": "659:6:51"
          }
        ],
        "canonicalName": "Bridge",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 7909,
          "nodeType": "StructuredDocumentation",
          "src": "491:129:51",
          "text": "@title Facilitates deposits and creation of deposit proposals, and deposit executions.\n@author ChainSafe Systems."
        },
        "fullyImplemented": true,
        "id": 8866,
        "linearizedBaseContracts": [
          8866,
          6143,
          5305,
          19105
        ],
        "name": "Bridge",
        "nameLocation": "630:6:51",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7918,
            "libraryName": {
              "id": 7916,
              "name": "ECDSA",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5989,
              "src": "678:5:51"
            },
            "nodeType": "UsingForDirective",
            "src": "672:24:51",
            "typeName": {
              "id": 7917,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "688:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 7923,
            "mutability": "constant",
            "name": "_PROPOSALS_TYPEHASH",
            "nameLocation": "727:19:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "702:179:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7919,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "702:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "50726f706f73616c732850726f706f73616c5b5d2070726f706f73616c732950726f706f73616c2875696e7438206f726967696e446f6d61696e49442c75696e743634206465706f7369744e6f6e63652c62797465733332207265736f7572636549442c6279746573206461746129",
                  "id": 7921,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "767:113:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5",
                    "typeString": "literal_string \"Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  },
                  "value": "Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5",
                    "typeString": "literal_string \"Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  }
                ],
                "id": 7920,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "757:9:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7922,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "757:124:51",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7928,
            "mutability": "constant",
            "name": "_PROPOSAL_TYPEHASH",
            "nameLocation": "912:18:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "887:147:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7924,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "887:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "50726f706f73616c2875696e7438206f726967696e446f6d61696e49442c75696e743634206465706f7369744e6f6e63652c62797465733332207265736f7572636549442c6279746573206461746129",
                  "id": 7926,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "951:82:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_cc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a70",
                    "typeString": "literal_string \"Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  },
                  "value": "Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_cc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a70",
                    "typeString": "literal_string \"Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  }
                ],
                "id": 7925,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "941:9:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7927,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "941:93:51",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "9dd694f4",
            "id": 7930,
            "mutability": "immutable",
            "name": "_domainID",
            "nameLocation": "1067:9:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1042:34:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7929,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1042:5:51",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "059972d2",
            "id": 7932,
            "mutability": "mutable",
            "name": "_MPCAddress",
            "nameLocation": "1097:11:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1082:26:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7931,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1082:7:51",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "fe4648f4",
            "id": 7935,
            "mutability": "mutable",
            "name": "_feeHandler",
            "nameLocation": "1134:11:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1115:30:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IFeeHandler_$18265",
              "typeString": "contract IFeeHandler"
            },
            "typeName": {
              "id": 7934,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7933,
                "name": "IFeeHandler",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 18265,
                "src": "1115:11:51"
              },
              "referencedDeclaration": 18265,
              "src": "1115:11:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                "typeString": "contract IFeeHandler"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "44e8e430",
            "id": 7938,
            "mutability": "mutable",
            "name": "_accessControl",
            "nameLocation": "1184:14:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1152:46:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
              "typeString": "contract IAccessControlSegregator"
            },
            "typeName": {
              "id": 7937,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7936,
                "name": "IAccessControlSegregator",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 18093,
                "src": "1152:24:51"
              },
              "referencedDeclaration": 18093,
              "src": "1152:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                "typeString": "contract IAccessControlSegregator"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "Bridge.Proposal",
            "id": 7947,
            "members": [
              {
                "constant": false,
                "id": 7940,
                "mutability": "mutable",
                "name": "originDomainID",
                "nameLocation": "1239:14:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1231:22:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7939,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "1231:5:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7942,
                "mutability": "mutable",
                "name": "depositNonce",
                "nameLocation": "1271:12:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1263:20:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 7941,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1263:6:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7944,
                "mutability": "mutable",
                "name": "resourceID",
                "nameLocation": "1301:10:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1293:18:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7943,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1293:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7946,
                "mutability": "mutable",
                "name": "data",
                "nameLocation": "1329:4:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1321:12:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 7945,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "1321:5:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Proposal",
            "nameLocation": "1212:8:51",
            "nodeType": "StructDefinition",
            "scope": 8866,
            "src": "1205:135:51",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "4b0b919d",
            "id": 7951,
            "mutability": "mutable",
            "name": "_depositCounts",
            "nameLocation": "1427:14:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1395:46:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
              "typeString": "mapping(uint8 => uint64)"
            },
            "typeName": {
              "id": 7950,
              "keyType": {
                "id": 7948,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1403:5:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1395:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                "typeString": "mapping(uint8 => uint64)"
              },
              "valueType": {
                "id": 7949,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1412:6:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "84db809f",
            "id": 7955,
            "mutability": "mutable",
            "name": "_resourceIDToHandlerAddress",
            "nameLocation": "1519:27:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1484:62:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 7954,
              "keyType": {
                "id": 7952,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1492:7:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1484:27:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 7953,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1503:7:51",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "f8c39e44",
            "id": 7959,
            "mutability": "mutable",
            "name": "isValidForwarder",
            "nameLocation": "1621:16:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1589:48:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 7958,
              "keyType": {
                "id": 7956,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1597:7:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1589:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 7957,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1608:4:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "08a64104",
            "id": 7965,
            "mutability": "mutable",
            "name": "usedNonces",
            "nameLocation": "1756:10:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1703:63:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
              "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
            },
            "typeName": {
              "id": 7964,
              "keyType": {
                "id": 7960,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1711:5:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1703:45:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
              },
              "valueType": {
                "id": 7963,
                "keyType": {
                  "id": 7961,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1728:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "1720:27:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "valueType": {
                  "id": 7962,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1739:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 7969,
            "name": "FeeHandlerChanged",
            "nameLocation": "1779:17:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7967,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newFeeHandler",
                  "nameLocation": "1805:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7969,
                  "src": "1797:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1797:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1796:23:51"
            },
            "src": "1773:47:51"
          },
          {
            "anonymous": false,
            "id": 7973,
            "name": "AccessControlChanged",
            "nameLocation": "1831:20:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7971,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newAccessControl",
                  "nameLocation": "1860:16:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7973,
                  "src": "1852:24:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1852:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1851:26:51"
            },
            "src": "1825:53:51"
          },
          {
            "anonymous": false,
            "id": 7987,
            "name": "Deposit",
            "nameLocation": "1889:7:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7975,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "1914:19:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1906:27:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7974,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1906:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7977,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "1951:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1943:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7976,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7979,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "1979:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1971:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 7978,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1971:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7981,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "2017:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2001:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2001:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7983,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2039:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2031:12:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7982,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2031:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7985,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "2061:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2053:23:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7984,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1896:186:51"
            },
            "src": "1883:200:51"
          },
          {
            "anonymous": false,
            "id": 7997,
            "name": "ProposalExecution",
            "nameLocation": "2094:17:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7989,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "originDomainID",
                  "nameLocation": "2129:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2121:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7988,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2121:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7991,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "2161:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2153:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 7990,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2153:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7993,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dataHash",
                  "nameLocation": "2191:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2183:16:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7992,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2183:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7995,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "2215:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2209:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7994,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2209:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2111:125:51"
            },
            "src": "2088:149:51"
          },
          {
            "anonymous": false,
            "id": 8005,
            "name": "FailedHandlerExecution",
            "nameLocation": "2249:22:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7999,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "lowLevelData",
                  "nameLocation": "2288:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2281:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7998,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2281:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8001,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "originDomainID",
                  "nameLocation": "2317:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2310:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8000,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2310:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8003,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "2348:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2341:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8002,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2341:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2271:95:51"
            },
            "src": "2243:124:51"
          },
          {
            "anonymous": false,
            "id": 8007,
            "name": "StartKeygen",
            "nameLocation": "2379:11:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2390:2:51"
            },
            "src": "2373:20:51"
          },
          {
            "anonymous": false,
            "id": 8009,
            "name": "EndKeygen",
            "nameLocation": "2405:9:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8008,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2414:2:51"
            },
            "src": "2399:18:51"
          },
          {
            "anonymous": false,
            "id": 8013,
            "name": "KeyRefresh",
            "nameLocation": "2429:10:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8011,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "hash",
                  "nameLocation": "2447:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8013,
                  "src": "2440:11:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8010,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2440:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2439:13:51"
            },
            "src": "2423:30:51"
          },
          {
            "anonymous": false,
            "id": 8017,
            "name": "Retry",
            "nameLocation": "2465:5:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8015,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "txHash",
                  "nameLocation": "2478:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8017,
                  "src": "2471:13:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8014,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2470:15:51"
            },
            "src": "2459:27:51"
          },
          {
            "id": 8023,
            "name": "AccessNotAllowed",
            "nameLocation": "2498:16:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8019,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2523:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2515:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8018,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8021,
                  "mutability": "mutable",
                  "name": "funcSig",
                  "nameLocation": "2538:7:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2531:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8020,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2514:32:51"
            },
            "src": "2492:55:51"
          },
          {
            "id": 8025,
            "name": "ResourceIDNotMappedToHandler",
            "nameLocation": "2559:28:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2587:2:51"
            },
            "src": "2553:37:51"
          },
          {
            "id": 8027,
            "name": "DepositToCurrentDomain",
            "nameLocation": "2602:22:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2624:2:51"
            },
            "src": "2596:31:51"
          },
          {
            "id": 8029,
            "name": "InvalidProposalSigner",
            "nameLocation": "2639:21:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8028,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2660:2:51"
            },
            "src": "2633:30:51"
          },
          {
            "id": 8031,
            "name": "EmptyProposalsArray",
            "nameLocation": "2675:19:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8030,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2694:2:51"
            },
            "src": "2669:28:51"
          },
          {
            "id": 8033,
            "name": "NonceDecrementsNotAllowed",
            "nameLocation": "2709:25:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8032,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:2:51"
            },
            "src": "2703:34:51"
          },
          {
            "id": 8035,
            "name": "MPCAddressAlreadySet",
            "nameLocation": "2749:20:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2769:2:51"
            },
            "src": "2743:29:51"
          },
          {
            "id": 8037,
            "name": "MPCAddressNotSet",
            "nameLocation": "2784:16:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8036,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2800:2:51"
            },
            "src": "2778:25:51"
          },
          {
            "id": 8039,
            "name": "MPCAddressIsNotUpdatable",
            "nameLocation": "2815:24:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2839:2:51"
            },
            "src": "2809:33:51"
          },
          {
            "id": 8041,
            "name": "MPCAddressZeroAddress",
            "nameLocation": "2854:21:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8040,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2875:2:51"
            },
            "src": "2848:30:51"
          },
          {
            "body": {
              "id": 8051,
              "nodeType": "Block",
              "src": "2907:63:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8044,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2930:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "src": "2930:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8046,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "2939:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8047,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2939:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8043,
                      "name": "_onlyAllowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8072,
                      "src": "2917:12:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes4_$_t_address_$returns$__$",
                        "typeString": "function (bytes4,address) view"
                      }
                    },
                    "id": 8048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2917:35:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8049,
                  "nodeType": "ExpressionStatement",
                  "src": "2917:35:51"
                },
                {
                  "id": 8050,
                  "nodeType": "PlaceholderStatement",
                  "src": "2962:1:51"
                }
              ]
            },
            "id": 8052,
            "name": "onlyAllowed",
            "nameLocation": "2893:11:51",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2904:2:51"
            },
            "src": "2884:86:51",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8071,
              "nodeType": "Block",
              "src": "3039:97:51",
              "statements": [
                {
                  "condition": {
                    "id": 8064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3053:38:51",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 8061,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8054,
                          "src": "3079:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        {
                          "id": 8062,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8056,
                          "src": "3084:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 8059,
                          "name": "_accessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "3054:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                            "typeString": "contract IAccessControlSegregator"
                          }
                        },
                        "id": 8060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasAccess",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18092,
                        "src": "3054:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes4_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes4,address) view external returns (bool)"
                        }
                      },
                      "id": 8063,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3054:37:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8070,
                  "nodeType": "IfStatement",
                  "src": "3049:80:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 8066,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8056,
                          "src": "3117:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 8067,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8054,
                          "src": "3125:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 8065,
                        "name": "AccessNotAllowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8023,
                        "src": "3100:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$_t_bytes4_$returns$__$",
                          "typeString": "function (address,bytes4) pure"
                        }
                      },
                      "id": 8068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3100:29:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8069,
                    "nodeType": "RevertStatement",
                    "src": "3093:36:51"
                  }
                }
              ]
            },
            "id": 8072,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyAllowed",
            "nameLocation": "2985:12:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8054,
                  "mutability": "mutable",
                  "name": "sig",
                  "nameLocation": "3005:3:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8072,
                  "src": "2998:10:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8053,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8056,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "3018:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8072,
                  "src": "3010:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3010:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2997:28:51"
            },
            "returnParameters": {
              "id": 8058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3039:0:51"
            },
            "scope": 8866,
            "src": "2976:160:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              5295
            ],
            "body": {
              "id": 8097,
              "nodeType": "Block",
              "src": "3205:252:51",
              "statements": [
                {
                  "assignments": [
                    8079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8079,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "3223:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8097,
                      "src": "3215:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8078,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3215:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8082,
                  "initialValue": {
                    "expression": {
                      "id": 8080,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967281,
                      "src": "3232:3:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 8081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3232:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3215:27:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 8083,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "3256:3:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "3256:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 8085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "3256:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "hexValue": "3230",
                        "id": 8086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3275:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      },
                      "src": "3256:21:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 8088,
                        "name": "isValidForwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7959,
                        "src": "3281:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 8090,
                      "indexExpression": {
                        "id": 8089,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8079,
                        "src": "3298:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3281:24:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3256:49:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8094,
                  "nodeType": "IfStatement",
                  "src": "3252:176:51",
                  "trueBody": {
                    "id": 8093,
                    "nodeType": "Block",
                    "src": "3307:121:51",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3330:88:51",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3348:56:51",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3362:2:51",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "calldatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "3383:12:51"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3383:14:51"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3399:2:51",
                                            "type": "",
                                            "value": "20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3379:3:51"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3379:23:51"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3366:12:51"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3366:37:51"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3358:3:51"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3358:46:51"
                              },
                              "variableNames": [
                                {
                                  "name": "signer",
                                  "nodeType": "YulIdentifier",
                                  "src": "3348:6:51"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 8079,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3348:6:51",
                            "valueSize": 1
                          }
                        ],
                        "id": 8092,
                        "nodeType": "InlineAssembly",
                        "src": "3321:97:51"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 8095,
                    "name": "signer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8079,
                    "src": "3444:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8077,
                  "id": 8096,
                  "nodeType": "Return",
                  "src": "3437:13:51"
                }
              ]
            },
            "id": 8098,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_msgSender",
            "nameLocation": "3151:10:51",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8074,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3173:8:51"
            },
            "parameters": {
              "id": 8073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3161:2:51"
            },
            "returnParameters": {
              "id": 8077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8076,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8098,
                  "src": "3196:7:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8075,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3195:9:51"
            },
            "scope": 8866,
            "src": "3142:315:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8125,
              "nodeType": "Block",
              "src": "3874:134:51",
              "statements": [
                {
                  "expression": {
                    "id": 8112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8110,
                      "name": "_domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7930,
                      "src": "3884:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8111,
                      "name": "domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8101,
                      "src": "3896:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "3884:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 8113,
                  "nodeType": "ExpressionStatement",
                  "src": "3884:20:51"
                },
                {
                  "expression": {
                    "id": 8118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8114,
                      "name": "_accessControl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7938,
                      "src": "3914:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8116,
                          "name": "accessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8103,
                          "src": "3956:13:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8115,
                        "name": "IAccessControlSegregator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18093,
                        "src": "3931:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAccessControlSegregator_$18093_$",
                          "typeString": "type(contract IAccessControlSegregator)"
                        }
                      },
                      "id": 8117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3931:39:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "src": "3914:56:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                      "typeString": "contract IAccessControlSegregator"
                    }
                  },
                  "id": 8119,
                  "nodeType": "ExpressionStatement",
                  "src": "3914:56:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8121,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "3988:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3988:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8120,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19087,
                      "src": "3981:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3981:20:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8124,
                  "nodeType": "ExpressionStatement",
                  "src": "3981:20:51"
                }
              ]
            },
            "documentation": {
              "id": 8099,
              "nodeType": "StructuredDocumentation",
              "src": "3463:328:51",
              "text": "@notice Initializes Bridge, creates and grants {_msgSender()} the admin role, sets access control\ncontract for bridge and sets the inital state of the Bridge to paused.\n@param domainID ID of chain the Bridge contract exists on.\n@param accessControl Address of access control contract."
            },
            "id": 8126,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "hexValue": "427269646765",
                    "id": 8106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3855:8:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7aa5ae620294318af92bf4e2b2a729646c932a80312a5fa630da993a2ef5cc10",
                      "typeString": "literal_string \"Bridge\""
                    },
                    "value": "Bridge"
                  },
                  {
                    "hexValue": "332e312e30",
                    "id": 8107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3865:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_0e23d0b508e2034d01a5c31f12e9d9bbb31708c5518057dde31201ab93b17cef",
                      "typeString": "literal_string \"3.1.0\""
                    },
                    "value": "3.1.0"
                  }
                ],
                "id": 8108,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 8105,
                  "name": "EIP712",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 6143,
                  "src": "3848:6:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "3848:25:51"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8101,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "3815:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8126,
                  "src": "3809:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8100,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3809:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8103,
                  "mutability": "mutable",
                  "name": "accessControl",
                  "nameLocation": "3833:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8126,
                  "src": "3825:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3825:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3808:39:51"
            },
            "returnParameters": {
              "id": 8109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3874:0:51"
            },
            "scope": 8866,
            "src": "3796:212:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8137,
              "nodeType": "Block",
              "src": "4341:37:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8133,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "4358:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4358:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8132,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19087,
                      "src": "4351:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4351:20:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8136,
                  "nodeType": "ExpressionStatement",
                  "src": "4351:20:51"
                }
              ]
            },
            "documentation": {
              "id": 8127,
              "nodeType": "StructuredDocumentation",
              "src": "4014:270:51",
              "text": "@notice Pauses deposits, proposal creation and voting, and deposit executions.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract."
            },
            "functionSelector": "80ae1c28",
            "id": 8138,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8130,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8129,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "4329:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "4329:11:51"
              }
            ],
            "name": "adminPauseTransfers",
            "nameLocation": "4298:19:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4317:2:51"
            },
            "returnParameters": {
              "id": 8131,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4341:0:51"
            },
            "scope": 8866,
            "src": "4289:89:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8159,
              "nodeType": "Block",
              "src": "4787:105:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8144,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "4801:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4824:1:51",
                          "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": 8146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4816:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8145,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4816:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4816:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4801:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8153,
                  "nodeType": "IfStatement",
                  "src": "4797:56:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8150,
                        "name": "MPCAddressNotSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8037,
                        "src": "4835:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8151,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4835:18:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8152,
                    "nodeType": "RevertStatement",
                    "src": "4828:25:51"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8155,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "4872:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4872:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8154,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19104,
                      "src": "4863:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4863:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8158,
                  "nodeType": "ExpressionStatement",
                  "src": "4863:22:51"
                }
              ]
            },
            "documentation": {
              "id": 8139,
              "nodeType": "StructuredDocumentation",
              "src": "4384:344:51",
              "text": "@notice Unpauses deposits, proposal creation and voting, and deposit executions.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@notice MPC address has to be set before Bridge can be unpaused"
            },
            "functionSelector": "ffaac0eb",
            "id": 8160,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8142,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8141,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "4775:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "4775:11:51"
              }
            ],
            "name": "adminUnpauseTransfers",
            "nameLocation": "4742:21:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4763:2:51"
            },
            "returnParameters": {
              "id": 8143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4787:0:51"
            },
            "scope": 8866,
            "src": "4733:159:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8195,
              "nodeType": "Block",
              "src": "5737:190:51",
              "statements": [
                {
                  "expression": {
                    "id": 8178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8174,
                        "name": "_resourceIDToHandlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7955,
                        "src": "5747:27:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 8176,
                      "indexExpression": {
                        "id": 8175,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "5775:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5747:39:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8177,
                      "name": "handlerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8163,
                      "src": "5789:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5747:56:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8179,
                  "nodeType": "ExpressionStatement",
                  "src": "5747:56:51"
                },
                {
                  "assignments": [
                    8182
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8182,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "5822:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8195,
                      "src": "5813:16:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IHandler_$18301",
                        "typeString": "contract IHandler"
                      },
                      "typeName": {
                        "id": 8181,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8180,
                          "name": "IHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18301,
                          "src": "5813:8:51"
                        },
                        "referencedDeclaration": 18301,
                        "src": "5813:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8186,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8184,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "5841:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8183,
                      "name": "IHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "5832:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                        "typeString": "type(contract IHandler)"
                      }
                    },
                    "id": 8185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5832:24:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IHandler_$18301",
                      "typeString": "contract IHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5813:43:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8190,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "5886:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 8191,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8167,
                        "src": "5898:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8192,
                        "name": "args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8169,
                        "src": "5915:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "id": 8187,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8182,
                        "src": "5866:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "id": 8189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResource",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18300,
                      "src": "5866:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,bytes memory) external"
                      }
                    },
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5866:54:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "5866:54:51"
                }
              ]
            },
            "documentation": {
              "id": 8161,
              "nodeType": "StructuredDocumentation",
              "src": "4898:697:51",
              "text": "@notice Sets a new resource for handler contracts that use the IERCHandler interface,\nand maps the {handlerAddress} to {resourceID} in {_resourceIDToHandlerAddress}.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler resource will be set for.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Additional data to be passed to specified handler."
            },
            "functionSelector": "8a3234c7",
            "id": 8196,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8172,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8171,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "5725:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "5725:11:51"
              }
            ],
            "name": "adminSetResource",
            "nameLocation": "5609:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8163,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "5634:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5626:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5626:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "5658:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5650:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5650:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8167,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "5678:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5670:23:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5670:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8169,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "5710:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5695:19:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8168,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5695:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5625:90:51"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5737:0:51"
            },
            "scope": 8866,
            "src": "5600:327:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8219,
              "nodeType": "Block",
              "src": "6504:109:51",
              "statements": [
                {
                  "assignments": [
                    8208
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8208,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "6526:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8219,
                      "src": "6514:19:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERCHandler_$18195",
                        "typeString": "contract IERCHandler"
                      },
                      "typeName": {
                        "id": 8207,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8206,
                          "name": "IERCHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18195,
                          "src": "6514:11:51"
                        },
                        "referencedDeclaration": 18195,
                        "src": "6514:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8212,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8210,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8199,
                        "src": "6548:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8209,
                      "name": "IERCHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18195,
                      "src": "6536:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                        "typeString": "type(contract IERCHandler)"
                      }
                    },
                    "id": 8211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6536:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERCHandler_$18195",
                      "typeString": "contract IERCHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6514:49:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8216,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8201,
                        "src": "6593:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 8213,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8208,
                        "src": "6573:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 8215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setBurnable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18180,
                      "src": "6573:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 8217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6573:33:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8218,
                  "nodeType": "ExpressionStatement",
                  "src": "6573:33:51"
                }
              ]
            },
            "documentation": {
              "id": 8197,
              "nodeType": "StructuredDocumentation",
              "src": "5933:473:51",
              "text": "@notice Sets a resource as burnable for handler contracts that use the IERCHandler interface.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler resource will be set for.\n@param tokenAddress Address of contract to be called when a deposit is made and a deposited is executed."
            },
            "functionSelector": "8c0c2631",
            "id": 8220,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8204,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8203,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "6492:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "6492:11:51"
              }
            ],
            "name": "adminSetBurnable",
            "nameLocation": "6420:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8199,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "6445:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "6437:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6437:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8201,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "6469:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "6461:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6461:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6436:46:51"
            },
            "returnParameters": {
              "id": 8205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6504:0:51"
            },
            "scope": 8866,
            "src": "6411:202:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8245,
              "nodeType": "Block",
              "src": "7050:142:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 8235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8231,
                          "name": "nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8225,
                          "src": "7068:5:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 8232,
                            "name": "_depositCounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7951,
                            "src": "7076:14:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                              "typeString": "mapping(uint8 => uint64)"
                            }
                          },
                          "id": 8234,
                          "indexExpression": {
                            "id": 8233,
                            "name": "domainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8223,
                            "src": "7091:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7076:24:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "7068:32:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "446f6573206e6f7420616c6c6f772064656372656d656e7473206f6620746865206e6f6e6365",
                        "id": 8236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7102:40:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8",
                          "typeString": "literal_string \"Does not allow decrements of the nonce\""
                        },
                        "value": "Does not allow decrements of the nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8",
                          "typeString": "literal_string \"Does not allow decrements of the nonce\""
                        }
                      ],
                      "id": 8230,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7060:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7060:83:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8238,
                  "nodeType": "ExpressionStatement",
                  "src": "7060:83:51"
                },
                {
                  "expression": {
                    "id": 8243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8239,
                        "name": "_depositCounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7951,
                        "src": "7153:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                          "typeString": "mapping(uint8 => uint64)"
                        }
                      },
                      "id": 8241,
                      "indexExpression": {
                        "id": 8240,
                        "name": "domainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "7168:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7153:24:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8242,
                      "name": "nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8225,
                      "src": "7180:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7153:32:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 8244,
                  "nodeType": "ExpressionStatement",
                  "src": "7153:32:51"
                }
              ]
            },
            "documentation": {
              "id": 8221,
              "nodeType": "StructuredDocumentation",
              "src": "6619:345:51",
              "text": "@notice Sets the nonce for the specific domainID.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param domainID Domain ID for increasing nonce.\n@param nonce The nonce value to be set."
            },
            "functionSelector": "edc20c3c",
            "id": 8246,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8228,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8227,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "7038:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "7038:11:51"
              }
            ],
            "name": "adminSetDepositNonce",
            "nameLocation": "6978:20:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "7005:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8246,
                  "src": "6999:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6999:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8225,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "7022:5:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8246,
                  "src": "7015:12:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8224,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7015:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6998:30:51"
            },
            "returnParameters": {
              "id": 8229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7050:0:51"
            },
            "scope": 8866,
            "src": "6969:223:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8262,
              "nodeType": "Block",
              "src": "7623:52:51",
              "statements": [
                {
                  "expression": {
                    "id": 8260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8256,
                        "name": "isValidForwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7959,
                        "src": "7633:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 8258,
                      "indexExpression": {
                        "id": 8257,
                        "name": "forwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8249,
                        "src": "7650:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7633:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8259,
                      "name": "valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8251,
                      "src": "7663:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7633:35:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8261,
                  "nodeType": "ExpressionStatement",
                  "src": "7633:35:51"
                }
              ]
            },
            "documentation": {
              "id": 8247,
              "nodeType": "StructuredDocumentation",
              "src": "7198:341:51",
              "text": "@notice Set a forwarder to be used.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param forwarder Forwarder address to be added.\n@param valid Decision for the specific forwarder."
            },
            "functionSelector": "d15ef64e",
            "id": 8263,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8254,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8253,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "7611:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "7611:11:51"
              }
            ],
            "name": "adminSetForwarder",
            "nameLocation": "7553:17:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8249,
                  "mutability": "mutable",
                  "name": "forwarder",
                  "nameLocation": "7579:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8263,
                  "src": "7571:17:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7571:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8251,
                  "mutability": "mutable",
                  "name": "valid",
                  "nameLocation": "7595:5:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8263,
                  "src": "7590:10:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8250,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7590:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7570:31:51"
            },
            "returnParameters": {
              "id": 8255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7623:0:51"
            },
            "scope": 8866,
            "src": "7544:131:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8281,
              "nodeType": "Block",
              "src": "8084:129:51",
              "statements": [
                {
                  "expression": {
                    "id": 8275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8271,
                      "name": "_accessControl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7938,
                      "src": "8094:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8273,
                          "name": "newAccessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8266,
                          "src": "8136:16:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8272,
                        "name": "IAccessControlSegregator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18093,
                        "src": "8111:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAccessControlSegregator_$18093_$",
                          "typeString": "type(contract IAccessControlSegregator)"
                        }
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8111:42:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "src": "8094:59:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                      "typeString": "contract IAccessControlSegregator"
                    }
                  },
                  "id": 8276,
                  "nodeType": "ExpressionStatement",
                  "src": "8094:59:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8278,
                        "name": "newAccessControl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8266,
                        "src": "8189:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8277,
                      "name": "AccessControlChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "8168:20:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8168:38:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8280,
                  "nodeType": "EmitStatement",
                  "src": "8163:43:51"
                }
              ]
            },
            "documentation": {
              "id": 8264,
              "nodeType": "StructuredDocumentation",
              "src": "7681:317:51",
              "text": "@notice Changes access control contract address.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param newAccessControl Address {_accessControl} will be updated to."
            },
            "functionSelector": "9d33b6d4",
            "id": 8282,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8269,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8268,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "8072:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "8072:11:51"
              }
            ],
            "name": "adminChangeAccessControl",
            "nameLocation": "8012:24:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8266,
                  "mutability": "mutable",
                  "name": "newAccessControl",
                  "nameLocation": "8045:16:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8282,
                  "src": "8037:24:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8037:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8036:26:51"
            },
            "returnParameters": {
              "id": 8270,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8084:0:51"
            },
            "scope": 8866,
            "src": "8003:210:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8300,
              "nodeType": "Block",
              "src": "8615:104:51",
              "statements": [
                {
                  "expression": {
                    "id": 8294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8290,
                      "name": "_feeHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7935,
                      "src": "8625:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                        "typeString": "contract IFeeHandler"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8292,
                          "name": "newFeeHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8285,
                          "src": "8651:13:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8291,
                        "name": "IFeeHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18265,
                        "src": "8639:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IFeeHandler_$18265_$",
                          "typeString": "type(contract IFeeHandler)"
                        }
                      },
                      "id": 8293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8639:26:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                        "typeString": "contract IFeeHandler"
                      }
                    },
                    "src": "8625:40:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                      "typeString": "contract IFeeHandler"
                    }
                  },
                  "id": 8295,
                  "nodeType": "ExpressionStatement",
                  "src": "8625:40:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8297,
                        "name": "newFeeHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8285,
                        "src": "8698:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8296,
                      "name": "FeeHandlerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7969,
                      "src": "8680:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8680:32:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8299,
                  "nodeType": "EmitStatement",
                  "src": "8675:37:51"
                }
              ]
            },
            "documentation": {
              "id": 8283,
              "nodeType": "StructuredDocumentation",
              "src": "8219:316:51",
              "text": "@notice Changes deposit fee handler contract address.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param newFeeHandler Address {_feeHandler} will be updated to."
            },
            "functionSelector": "8b63aebf",
            "id": 8301,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8288,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8287,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "8603:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "8603:11:51"
              }
            ],
            "name": "adminChangeFeeHandler",
            "nameLocation": "8549:21:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8285,
                  "mutability": "mutable",
                  "name": "newFeeHandler",
                  "nameLocation": "8579:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8301,
                  "src": "8571:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8571:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8570:23:51"
            },
            "returnParameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8615:0:51"
            },
            "scope": 8866,
            "src": "8540:179:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8324,
              "nodeType": "Block",
              "src": "9238:98:51",
              "statements": [
                {
                  "assignments": [
                    8313
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8313,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "9260:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8324,
                      "src": "9248:19:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERCHandler_$18195",
                        "typeString": "contract IERCHandler"
                      },
                      "typeName": {
                        "id": 8312,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8311,
                          "name": "IERCHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18195,
                          "src": "9248:11:51"
                        },
                        "referencedDeclaration": 18195,
                        "src": "9248:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8317,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8315,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8304,
                        "src": "9282:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8314,
                      "name": "IERCHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18195,
                      "src": "9270:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                        "typeString": "type(contract IERCHandler)"
                      }
                    },
                    "id": 8316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9270:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERCHandler_$18195",
                      "typeString": "contract IERCHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9248:49:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8321,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8306,
                        "src": "9324:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 8318,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "9307:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 8320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18186,
                      "src": "9307:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9307:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8323,
                  "nodeType": "ExpressionStatement",
                  "src": "9307:22:51"
                }
              ]
            },
            "documentation": {
              "id": 8302,
              "nodeType": "StructuredDocumentation",
              "src": "8725:399:51",
              "text": "@notice Used to manually withdraw funds from ERC safes.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler to withdraw from.\n@param data ABI-encoded withdrawal params relevant to the specified handler."
            },
            "functionSelector": "bd2a1820",
            "id": 8325,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8309,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8308,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "9226:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "9226:11:51"
              }
            ],
            "name": "adminWithdraw",
            "nameLocation": "9138:13:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8304,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "9169:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8325,
                  "src": "9161:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9161:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8306,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "9206:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8325,
                  "src": "9193:17:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8305,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9193:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9151:65:51"
            },
            "returnParameters": {
              "id": 8310,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9238:0:51"
            },
            "scope": 8866,
            "src": "9129:207:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8441,
              "nodeType": "Block",
              "src": "10477:932:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8343,
                      "name": "destinationDomainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8328,
                      "src": "10491:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 8344,
                      "name": "_domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7930,
                      "src": "10514:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "10491:32:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8349,
                  "nodeType": "IfStatement",
                  "src": "10487:69:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8346,
                        "name": "DepositToCurrentDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8027,
                        "src": "10532:22:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10532:24:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8348,
                    "nodeType": "RevertStatement",
                    "src": "10525:31:51"
                  }
                },
                {
                  "assignments": [
                    8351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8351,
                      "mutability": "mutable",
                      "name": "sender",
                      "nameLocation": "10575:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "10567:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8350,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10567:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8354,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8352,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8098
                      ],
                      "referencedDeclaration": 8098,
                      "src": "10584:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 8353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10584:12:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10567:29:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 8357,
                          "name": "_feeHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7935,
                          "src": "10618:11:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                            "typeString": "contract IFeeHandler"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                            "typeString": "contract IFeeHandler"
                          }
                        ],
                        "id": 8356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10610:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10610:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10610:20:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10642:1:51",
                          "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": 8360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10634:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8359,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10634:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8362,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10634:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10610:34:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8387,
                    "nodeType": "Block",
                    "src": "10733:173:51",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8379,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8351,
                              "src": "10822:6:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8380,
                              "name": "_domainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7930,
                              "src": "10830:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 8381,
                              "name": "destinationDomainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8328,
                              "src": "10841:19:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 8382,
                              "name": "resourceID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8330,
                              "src": "10862:10:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 8383,
                              "name": "depositData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8332,
                              "src": "10874:11:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 8384,
                              "name": "feeData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8334,
                              "src": "10887:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "expression": {
                                "id": 8373,
                                "name": "_feeHandler",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7935,
                                "src": "10781:11:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                                  "typeString": "contract IFeeHandler"
                                }
                              },
                              "id": 8375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectFee",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18238,
                              "src": "10781:22:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                "typeString": "function (address,uint8,uint8,bytes32,bytes memory,bytes memory) payable external"
                              }
                            },
                            "id": 8378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "expression": {
                                  "id": 8376,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "10811:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 8377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "10811:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "10781:40:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$value",
                              "typeString": "function (address,uint8,uint8,bytes32,bytes memory,bytes memory) payable external"
                            }
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10781:114:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8386,
                        "nodeType": "ExpressionStatement",
                        "src": "10781:114:51"
                      }
                    ]
                  },
                  "id": 8388,
                  "nodeType": "IfStatement",
                  "src": "10606:300:51",
                  "trueBody": {
                    "id": 8372,
                    "nodeType": "Block",
                    "src": "10646:81:51",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8365,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "10668:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 8366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "10668:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 8367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10681:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10668:14:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "6e6f2046656548616e646c65722c206d73672e76616c756520213d2030",
                              "id": 8369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10684:31:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43",
                                "typeString": "literal_string \"no FeeHandler, msg.value != 0\""
                              },
                              "value": "no FeeHandler, msg.value != 0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43",
                                "typeString": "literal_string \"no FeeHandler, msg.value != 0\""
                              }
                            ],
                            "id": 8364,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "10660:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10660:56:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8371,
                        "nodeType": "ExpressionStatement",
                        "src": "10660:56:51"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8390,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "10923:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "10915:15:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8389,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10915:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8394,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8391,
                      "name": "_resourceIDToHandlerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7955,
                      "src": "10933:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8393,
                    "indexExpression": {
                      "id": 8392,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8330,
                      "src": "10961:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10933:39:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10915:57:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8395,
                      "name": "handler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8390,
                      "src": "10986:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11005:1:51",
                          "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": 8397,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10997:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8396,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10997:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10997:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10986:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8404,
                  "nodeType": "IfStatement",
                  "src": "10982:64:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8401,
                        "name": "ResourceIDNotMappedToHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "11016:28:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11016:30:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8403,
                    "nodeType": "RevertStatement",
                    "src": "11009:37:51"
                  }
                },
                {
                  "expression": {
                    "id": 8410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8405,
                      "name": "depositNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8339,
                      "src": "11057:12:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "11072:37:51",
                      "subExpression": {
                        "baseExpression": {
                          "id": 8406,
                          "name": "_depositCounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7951,
                          "src": "11074:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                            "typeString": "mapping(uint8 => uint64)"
                          }
                        },
                        "id": 8408,
                        "indexExpression": {
                          "id": 8407,
                          "name": "destinationDomainID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8328,
                          "src": "11089:19:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "11074:35:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11057:52:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 8411,
                  "nodeType": "ExpressionStatement",
                  "src": "11057:52:51"
                },
                {
                  "assignments": [
                    8414
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8414,
                      "mutability": "mutable",
                      "name": "depositHandler",
                      "nameLocation": "11129:14:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "11120:23:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IHandler_$18301",
                        "typeString": "contract IHandler"
                      },
                      "typeName": {
                        "id": 8413,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8412,
                          "name": "IHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18301,
                          "src": "11120:8:51"
                        },
                        "referencedDeclaration": 18301,
                        "src": "11120:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8418,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8416,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8390,
                        "src": "11155:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8415,
                      "name": "IHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "11146:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                        "typeString": "type(contract IHandler)"
                      }
                    },
                    "id": 8417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11146:17:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IHandler_$18301",
                      "typeString": "contract IHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11120:43:51"
                },
                {
                  "expression": {
                    "id": 8426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8419,
                      "name": "handlerResponse",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8341,
                      "src": "11173:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8422,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8330,
                          "src": "11214:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 8423,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8351,
                          "src": "11226:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 8424,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8332,
                          "src": "11234:11:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "id": 8420,
                          "name": "depositHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8414,
                          "src": "11191:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IHandler_$18301",
                            "typeString": "contract IHandler"
                          }
                        },
                        "id": 8421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18280,
                        "src": "11191:22:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes32,address,bytes memory) external returns (bytes memory)"
                        }
                      },
                      "id": 8425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11191:55:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "11173:73:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 8427,
                  "nodeType": "ExpressionStatement",
                  "src": "11173:73:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8429,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8328,
                        "src": "11270:19:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 8430,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8330,
                        "src": "11291:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 8431,
                        "name": "depositNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8339,
                        "src": "11303:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 8432,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8351,
                        "src": "11317:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8433,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8332,
                        "src": "11325:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 8434,
                        "name": "handlerResponse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8341,
                        "src": "11338:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 8428,
                      "name": "Deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7987,
                      "src": "11262:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_bytes32_$_t_uint64_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint8,bytes32,uint64,address,bytes memory,bytes memory)"
                      }
                    },
                    "id": 8435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11262:92:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8436,
                  "nodeType": "EmitStatement",
                  "src": "11257:97:51"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 8437,
                        "name": "depositNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8339,
                        "src": "11372:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 8438,
                        "name": "handlerResponse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8341,
                        "src": "11386:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "id": 8439,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "11371:31:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint64_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 8342,
                  "id": 8440,
                  "nodeType": "Return",
                  "src": "11364:38:51"
                }
              ]
            },
            "documentation": {
              "id": 8326,
              "nodeType": "StructuredDocumentation",
              "src": "9342:907:51",
              "text": "@notice Initiates a transfer using a specified handler contract.\n@notice Only callable when Bridge is not paused.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID used to find address of handler to be used for deposit.\n@param depositData Additional data to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler.\n@notice Emits {Deposit} event with all necessary parameters and a handler response.\n@return depositNonce deposit nonce for the destination domain.\n@return handlerResponse a handler response:\n- ERC20Handler: responds with an empty data.\n- ERC721Handler: responds with the deposited token metadata acquired by calling a tokenURI method in the token contract.\n- GmpHandler: responds with an empty data."
            },
            "functionSelector": "73c45c98",
            "id": 8442,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8337,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8336,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19043,
                  "src": "10395:13:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "10395:13:51"
              }
            ],
            "name": "deposit",
            "nameLocation": "10263:7:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8328,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "10277:19:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10271:25:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8327,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10271:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8330,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "10306:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10298:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8329,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10298:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8332,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "10333:11:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10318:26:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8331,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10318:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8334,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "10361:7:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10346:22:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8333,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10346:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10270:99:51"
            },
            "returnParameters": {
              "id": 8342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8339,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "10433:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10426:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8338,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10426:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8341,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "10460:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10447:28:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8340,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10447:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10425:51:51"
            },
            "scope": 8866,
            "src": "10254:1155:51",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8474,
              "nodeType": "Block",
              "src": "12285:158:51",
              "statements": [
                {
                  "assignments": [
                    8455
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8455,
                      "mutability": "mutable",
                      "name": "proposalArray",
                      "nameLocation": "12313:13:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8474,
                      "src": "12295:31:51",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct Bridge.Proposal[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8453,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 8452,
                            "name": "Proposal",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7947,
                            "src": "12295:8:51"
                          },
                          "referencedDeclaration": 7947,
                          "src": "12295:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                            "typeString": "struct Bridge.Proposal"
                          }
                        },
                        "id": 8454,
                        "nodeType": "ArrayTypeName",
                        "src": "12295:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                          "typeString": "struct Bridge.Proposal[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8462,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 8460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12344:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 8459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12329:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (struct Bridge.Proposal memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8457,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 8456,
                            "name": "Proposal",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7947,
                            "src": "12333:8:51"
                          },
                          "referencedDeclaration": 7947,
                          "src": "12333:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                            "typeString": "struct Bridge.Proposal"
                          }
                        },
                        "id": 8458,
                        "nodeType": "ArrayTypeName",
                        "src": "12333:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                          "typeString": "struct Bridge.Proposal[]"
                        }
                      }
                    },
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12329:17:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                      "typeString": "struct Bridge.Proposal memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12295:51:51"
                },
                {
                  "expression": {
                    "id": 8467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8463,
                        "name": "proposalArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "12356:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8465,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 8464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12370:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12356:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                        "typeString": "struct Bridge.Proposal memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8466,
                      "name": "proposal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8446,
                      "src": "12375:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                        "typeString": "struct Bridge.Proposal memory"
                      }
                    },
                    "src": "12356:27:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                      "typeString": "struct Bridge.Proposal memory"
                    }
                  },
                  "id": 8468,
                  "nodeType": "ExpressionStatement",
                  "src": "12356:27:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8470,
                        "name": "proposalArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "12411:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      {
                        "id": 8471,
                        "name": "signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8448,
                        "src": "12426:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 8469,
                      "name": "executeProposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8658,
                      "src": "12394:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                        "typeString": "function (struct Bridge.Proposal memory[] memory,bytes calldata)"
                      }
                    },
                    "id": 8472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12394:42:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8473,
                  "nodeType": "ExpressionStatement",
                  "src": "12394:42:51"
                }
              ]
            },
            "documentation": {
              "id": 8443,
              "nodeType": "StructuredDocumentation",
              "src": "11415:781:51",
              "text": "@notice Executes a deposit proposal using a specified handler contract (only if signature is signed by MPC).\n@notice Failed executeProposal from handler don't revert, emits {FailedHandlerExecution} event.\n@param proposal Proposal which consists of:\n- originDomainID ID of chain deposit originated from.\n- resourceID ResourceID to be used when making deposits.\n- depositNonce ID of deposit generated by origin Bridge contract.\n- data Data originally provided when deposit was made.\n@param signature bytes memory signature composed of MPC key shares\n@notice Emits {ProposalExecution} event.\n@notice For ERC handlers, when execution fails, the handler will terminate the function with revert."
            },
            "functionSelector": "f0ead51e",
            "id": 8475,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeProposal",
            "nameLocation": "12210:15:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8446,
                  "mutability": "mutable",
                  "name": "proposal",
                  "nameLocation": "12242:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8475,
                  "src": "12226:24:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                    "typeString": "struct Bridge.Proposal"
                  },
                  "typeName": {
                    "id": 8445,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8444,
                      "name": "Proposal",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 7947,
                      "src": "12226:8:51"
                    },
                    "referencedDeclaration": 7947,
                    "src": "12226:8:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                      "typeString": "struct Bridge.Proposal"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8448,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "12267:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8475,
                  "src": "12252:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8447,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12252:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12225:52:51"
            },
            "returnParameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12285:0:51"
            },
            "scope": 8866,
            "src": "12201:242:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8657,
              "nodeType": "Block",
              "src": "13421:1304:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 8487,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "13435:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13435:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13455:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13435:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8494,
                  "nodeType": "IfStatement",
                  "src": "13431:55:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8491,
                        "name": "EmptyProposalsArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8031,
                        "src": "13465:19:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13465:21:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8493,
                    "nodeType": "RevertStatement",
                    "src": "13458:28:51"
                  }
                },
                {
                  "condition": {
                    "id": 8499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13500:29:51",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 8496,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8480,
                          "src": "13508:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          }
                        },
                        {
                          "id": 8497,
                          "name": "signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8482,
                          "src": "13519:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 8495,
                        "name": "verify",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8865,
                        "src": "13501:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$",
                          "typeString": "function (struct Bridge.Proposal memory[] memory,bytes calldata) view returns (bool)"
                        }
                      },
                      "id": 8498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13501:28:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8503,
                  "nodeType": "IfStatement",
                  "src": "13496:65:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8500,
                        "name": "InvalidProposalSigner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8029,
                        "src": "13538:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13538:23:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8502,
                    "nodeType": "RevertStatement",
                    "src": "13531:30:51"
                  }
                },
                {
                  "body": {
                    "id": 8655,
                    "nodeType": "Block",
                    "src": "13619:1100:51",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8516,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "13655:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8518,
                                "indexExpression": {
                                  "id": 8517,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "13665:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13655:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8519,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "originDomainID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7940,
                              "src": "13655:27:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8520,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "13684:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8522,
                                "indexExpression": {
                                  "id": 8521,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "13694:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13684:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "depositNonce",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7942,
                              "src": "13684:25:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 8515,
                            "name": "isProposalExecuted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8774,
                            "src": "13636:18:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint256) view returns (bool)"
                            }
                          },
                          "id": 8524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13636:74:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8527,
                        "nodeType": "IfStatement",
                        "src": "13633:120:51",
                        "trueBody": {
                          "id": 8526,
                          "nodeType": "Block",
                          "src": "13712:41:51",
                          "statements": [
                            {
                              "id": 8525,
                              "nodeType": "Continue",
                              "src": "13730:8:51"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          8529
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8529,
                            "mutability": "mutable",
                            "name": "handler",
                            "nameLocation": "13775:7:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13767:15:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "13767:7:51",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8536,
                        "initialValue": {
                          "baseExpression": {
                            "id": 8530,
                            "name": "_resourceIDToHandlerAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7955,
                            "src": "13785:27:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 8535,
                          "indexExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8531,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8480,
                                "src": "13813:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory[] memory"
                                }
                              },
                              "id": 8533,
                              "indexExpression": {
                                "id": 8532,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8505,
                                "src": "13823:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13813:12:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                "typeString": "struct Bridge.Proposal memory"
                              }
                            },
                            "id": 8534,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "resourceID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7944,
                            "src": "13813:23:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13785:52:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13767:70:51"
                      },
                      {
                        "assignments": [
                          8538
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8538,
                            "mutability": "mutable",
                            "name": "dataHash",
                            "nameLocation": "13859:8:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13851:16:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 8537,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "13851:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8549,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8542,
                                  "name": "handler",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8529,
                                  "src": "13897:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8543,
                                      "name": "proposals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8480,
                                      "src": "13906:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory[] memory"
                                      }
                                    },
                                    "id": 8545,
                                    "indexExpression": {
                                      "id": 8544,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8505,
                                      "src": "13916:1:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "13906:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory"
                                    }
                                  },
                                  "id": 8546,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "data",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7946,
                                  "src": "13906:17:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 8540,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "13880:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 8541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "13880:16:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 8547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13880:44:51",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 8539,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967288,
                            "src": "13870:9:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 8548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13870:55:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13851:74:51"
                      },
                      {
                        "assignments": [
                          8552
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8552,
                            "mutability": "mutable",
                            "name": "depositHandler",
                            "nameLocation": "13949:14:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13940:23:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IHandler_$18301",
                              "typeString": "contract IHandler"
                            },
                            "typeName": {
                              "id": 8551,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8550,
                                "name": "IHandler",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 18301,
                                "src": "13940:8:51"
                              },
                              "referencedDeclaration": 18301,
                              "src": "13940:8:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IHandler_$18301",
                                "typeString": "contract IHandler"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8556,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8554,
                              "name": "handler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8529,
                              "src": "13975:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8553,
                            "name": "IHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18301,
                            "src": "13966:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                              "typeString": "type(contract IHandler)"
                            }
                          },
                          "id": 8555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13966:17:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IHandler_$18301",
                            "typeString": "contract IHandler"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13940:43:51"
                      },
                      {
                        "expression": {
                          "id": 8579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8557,
                                "name": "usedNonces",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7965,
                                "src": "13998:10:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 8568,
                              "indexExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 8558,
                                    "name": "proposals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8480,
                                    "src": "14009:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory[] memory"
                                    }
                                  },
                                  "id": 8560,
                                  "indexExpression": {
                                    "id": 8559,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8505,
                                    "src": "14019:1:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14009:12:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory"
                                  }
                                },
                                "id": 8561,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "originDomainID",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7940,
                                "src": "14009:27:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13998:39:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 8569,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 8567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 8562,
                                    "name": "proposals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8480,
                                    "src": "14038:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory[] memory"
                                    }
                                  },
                                  "id": 8564,
                                  "indexExpression": {
                                    "id": 8563,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8505,
                                    "src": "14048:1:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14038:12:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory"
                                  }
                                },
                                "id": 8565,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "depositNonce",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7942,
                                "src": "14038:25:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "hexValue": "323536",
                                "id": 8566,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14066:3:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "src": "14038:31:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13998:72:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 8570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14074:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  },
                                  "id": 8576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8571,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8480,
                                        "src": "14080:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8573,
                                      "indexExpression": {
                                        "id": 8572,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8505,
                                        "src": "14090:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14080:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8574,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "depositNonce",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7942,
                                    "src": "14080:25:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 8575,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14108:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "14080:31:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                }
                              ],
                              "id": 8577,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "14079:33:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "14074:38:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13998:114:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8580,
                        "nodeType": "ExpressionStatement",
                        "src": "13998:114:51"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 8608,
                              "nodeType": "Block",
                              "src": "14245:138:51",
                              "statements": [
                                {
                                  "eventCall": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8596,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14286:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8598,
                                          "indexExpression": {
                                            "id": 8597,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14296:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14286:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8599,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "originDomainID",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7940,
                                        "src": "14286:27:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8600,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14315:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8602,
                                          "indexExpression": {
                                            "id": 8601,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14325:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14315:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8603,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "depositNonce",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7942,
                                        "src": "14315:25:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      {
                                        "id": 8604,
                                        "name": "dataHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8538,
                                        "src": "14342:8:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "id": 8605,
                                        "name": "handlerResponse",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8593,
                                        "src": "14352:15:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8595,
                                      "name": "ProposalExecution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7997,
                                      "src": "14268:17:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                        "typeString": "function (uint8,uint64,bytes32,bytes memory)"
                                      }
                                    },
                                    "id": 8606,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14268:100:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8607,
                                  "nodeType": "EmitStatement",
                                  "src": "14263:105:51"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8609,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 8594,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 8593,
                                  "mutability": "mutable",
                                  "name": "handlerResponse",
                                  "nameLocation": "14228:15:51",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8609,
                                  "src": "14215:28:51",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 8592,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14215:5:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "14214:30:51"
                            },
                            "src": "14206:177:51"
                          },
                          {
                            "block": {
                              "id": 8652,
                              "nodeType": "Block",
                              "src": "14418:291:51",
                              "statements": [
                                {
                                  "eventCall": {
                                    "arguments": [
                                      {
                                        "id": 8614,
                                        "name": "lowLevelData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8611,
                                        "src": "14464:12:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8615,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14478:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8617,
                                          "indexExpression": {
                                            "id": 8616,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14488:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14478:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8618,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "originDomainID",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7940,
                                        "src": "14478:27:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8619,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14507:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8621,
                                          "indexExpression": {
                                            "id": 8620,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14517:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14507:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8622,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "depositNonce",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7942,
                                        "src": "14507:25:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      ],
                                      "id": 8613,
                                      "name": "FailedHandlerExecution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8005,
                                      "src": "14441:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint8_$_t_uint64_$returns$__$",
                                        "typeString": "function (bytes memory,uint8,uint64)"
                                      }
                                    },
                                    "id": 8623,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14441:92:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8624,
                                  "nodeType": "EmitStatement",
                                  "src": "14436:97:51"
                                },
                                {
                                  "expression": {
                                    "id": 8649,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 8625,
                                          "name": "usedNonces",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7965,
                                          "src": "14551:10:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                            "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                                          }
                                        },
                                        "id": 8636,
                                        "indexExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 8626,
                                              "name": "proposals",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8480,
                                              "src": "14562:9:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                "typeString": "struct Bridge.Proposal memory[] memory"
                                              }
                                            },
                                            "id": 8628,
                                            "indexExpression": {
                                              "id": 8627,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8505,
                                              "src": "14572:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14562:12:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory"
                                            }
                                          },
                                          "id": 8629,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "originDomainID",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7940,
                                          "src": "14562:27:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "14551:39:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                          "typeString": "mapping(uint256 => uint256)"
                                        }
                                      },
                                      "id": 8637,
                                      "indexExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        },
                                        "id": 8635,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 8630,
                                              "name": "proposals",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8480,
                                              "src": "14591:9:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                "typeString": "struct Bridge.Proposal memory[] memory"
                                              }
                                            },
                                            "id": 8632,
                                            "indexExpression": {
                                              "id": 8631,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8505,
                                              "src": "14601:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14591:12:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory"
                                            }
                                          },
                                          "id": 8633,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "depositNonce",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7942,
                                          "src": "14591:25:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "hexValue": "323536",
                                          "id": 8634,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "14619:3:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_256_by_1",
                                            "typeString": "int_const 256"
                                          },
                                          "value": "256"
                                        },
                                        "src": "14591:31:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "14551:72:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "&=",
                                    "rightHandSide": {
                                      "id": 8648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "14627:41:51",
                                      "subExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8646,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "31",
                                              "id": 8638,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "14629:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<<",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint64",
                                                    "typeString": "uint64"
                                                  },
                                                  "id": 8644,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "expression": {
                                                      "baseExpression": {
                                                        "id": 8639,
                                                        "name": "proposals",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8480,
                                                        "src": "14635:9:51",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                                        }
                                                      },
                                                      "id": 8641,
                                                      "indexExpression": {
                                                        "id": 8640,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8505,
                                                        "src": "14645:1:51",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "14635:12:51",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                                        "typeString": "struct Bridge.Proposal memory"
                                                      }
                                                    },
                                                    "id": 8642,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "depositNonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 7942,
                                                    "src": "14635:25:51",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint64",
                                                      "typeString": "uint64"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "%",
                                                  "rightExpression": {
                                                    "hexValue": "323536",
                                                    "id": 8643,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "14663:3:51",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_256_by_1",
                                                      "typeString": "int_const 256"
                                                    },
                                                    "value": "256"
                                                  },
                                                  "src": "14635:31:51",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint64",
                                                    "typeString": "uint64"
                                                  }
                                                }
                                              ],
                                              "id": 8645,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "14634:33:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint64",
                                                "typeString": "uint64"
                                              }
                                            },
                                            "src": "14629:38:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 8647,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "14628:40:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "14551:117:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 8650,
                                  "nodeType": "ExpressionStatement",
                                  "src": "14551:117:51"
                                },
                                {
                                  "id": 8651,
                                  "nodeType": "Continue",
                                  "src": "14686:8:51"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8653,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 8612,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 8611,
                                  "mutability": "mutable",
                                  "name": "lowLevelData",
                                  "nameLocation": "14404:12:51",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8653,
                                  "src": "14391:25:51",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 8610,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14391:5:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "14390:27:51"
                            },
                            "src": "14384:325:51"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8583,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "14162:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8585,
                                "indexExpression": {
                                  "id": 8584,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "14172:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14162:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8586,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "resourceID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7944,
                              "src": "14162:23:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8587,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "14187:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8589,
                                "indexExpression": {
                                  "id": 8588,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "14197:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14187:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8590,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7946,
                              "src": "14187:17:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 8581,
                              "name": "depositHandler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8552,
                              "src": "14131:14:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IHandler_$18301",
                                "typeString": "contract IHandler"
                              }
                            },
                            "id": 8582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "executeProposal",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18290,
                            "src": "14131:30:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes32,bytes memory) external returns (bytes memory)"
                            }
                          },
                          "id": 8591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14131:74:51",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 8654,
                        "nodeType": "TryStatement",
                        "src": "14127:582:51"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8508,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8505,
                      "src": "13592:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8509,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "13596:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13596:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13592:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8656,
                  "initializationExpression": {
                    "assignments": [
                      8505
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8505,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13585:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 8656,
                        "src": "13577:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8504,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13577:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8507,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13589:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13577:13:51"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13614:3:51",
                      "subExpression": {
                        "id": 8512,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8505,
                        "src": "13614:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8514,
                    "nodeType": "ExpressionStatement",
                    "src": "13614:3:51"
                  },
                  "nodeType": "ForStatement",
                  "src": "13572:1147:51"
                }
              ]
            },
            "documentation": {
              "id": 8476,
              "nodeType": "StructuredDocumentation",
              "src": "12449:865:51",
              "text": "@notice Executes a batch of deposit proposals using a specified handler contract for each proposal (only if signature is signed by MPC).\n@notice If executeProposals fails it doesn't revert, emits {FailedHandlerExecution} event.\n@param proposals Array of Proposal which consists of:\n- originDomainID ID of chain deposit originated from.\n- resourceID ResourceID to be used when making deposits.\n- depositNonce ID of deposit generated by origin Bridge contract.\n- data Data originally provided when deposit was made.\n@param signature bytes memory signature for the whole array composed of MPC key shares\n@notice Emits {ProposalExecution} event for each proposal in the batch.\n@notice For ERC handlers, when execution fails, the handler will terminate the function with revert."
            },
            "functionSelector": "1f5c64c1",
            "id": 8658,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8485,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8484,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19043,
                  "src": "13407:13:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "13407:13:51"
              }
            ],
            "name": "executeProposals",
            "nameLocation": "13328:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8480,
                  "mutability": "mutable",
                  "name": "proposals",
                  "nameLocation": "13363:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "13345:27:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Bridge.Proposal[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8478,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 8477,
                        "name": "Proposal",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 7947,
                        "src": "13345:8:51"
                      },
                      "referencedDeclaration": 7947,
                      "src": "13345:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                        "typeString": "struct Bridge.Proposal"
                      }
                    },
                    "id": 8479,
                    "nodeType": "ArrayTypeName",
                    "src": "13345:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                      "typeString": "struct Bridge.Proposal[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "13389:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "13374:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13374:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13344:55:51"
            },
            "returnParameters": {
              "id": 8486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13421:0:51"
            },
            "scope": 8866,
            "src": "13319:1406:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8677,
              "nodeType": "Block",
              "src": "15157:105:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8664,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15171:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15194:1:51",
                          "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": 8666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15186:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8665,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15186:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15186:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15171:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8673,
                  "nodeType": "IfStatement",
                  "src": "15167:60:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8670,
                        "name": "MPCAddressAlreadySet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8035,
                        "src": "15205:20:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15205:22:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8672,
                    "nodeType": "RevertStatement",
                    "src": "15198:29:51"
                  }
                },
                {
                  "eventCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8674,
                      "name": "StartKeygen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8007,
                      "src": "15242:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15242:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8676,
                  "nodeType": "EmitStatement",
                  "src": "15237:18:51"
                }
              ]
            },
            "documentation": {
              "id": 8659,
              "nodeType": "StructuredDocumentation",
              "src": "14731:377:51",
              "text": "@notice Once MPC address is set, this method can't be invoked anymore.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract."
            },
            "functionSelector": "6ba6db6b",
            "id": 8678,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8662,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8661,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "15145:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "15145:11:51"
              }
            ],
            "name": "startKeygen",
            "nameLocation": "15122:11:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15133:2:51"
            },
            "returnParameters": {
              "id": 8663,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15157:0:51"
            },
            "scope": 8866,
            "src": "15113:149:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8718,
              "nodeType": "Block",
              "src": "15800:243:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8686,
                      "name": "MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8681,
                      "src": "15814:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15836:1:51",
                          "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": 8688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15828:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8687,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15828:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15828:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15814:24:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8695,
                  "nodeType": "IfStatement",
                  "src": "15810:60:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8692,
                        "name": "MPCAddressZeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8041,
                        "src": "15847:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15847:23:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8694,
                    "nodeType": "RevertStatement",
                    "src": "15840:30:51"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8696,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15884:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15907:1:51",
                          "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": 8698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15899:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15899:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15899:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15884:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8705,
                  "nodeType": "IfStatement",
                  "src": "15880:64:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8702,
                        "name": "MPCAddressIsNotUpdatable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8039,
                        "src": "15918:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15918:26:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8704,
                    "nodeType": "RevertStatement",
                    "src": "15911:33:51"
                  }
                },
                {
                  "expression": {
                    "id": 8708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8706,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15954:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8707,
                      "name": "MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8681,
                      "src": "15968:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15954:24:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8709,
                  "nodeType": "ExpressionStatement",
                  "src": "15954:24:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8711,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "15997:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15997:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8710,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19104,
                      "src": "15988:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15988:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8714,
                  "nodeType": "ExpressionStatement",
                  "src": "15988:22:51"
                },
                {
                  "eventCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8715,
                      "name": "EndKeygen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8009,
                      "src": "16025:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16025:11:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8717,
                  "nodeType": "EmitStatement",
                  "src": "16020:16:51"
                }
              ]
            },
            "documentation": {
              "id": 8679,
              "nodeType": "StructuredDocumentation",
              "src": "15268:467:51",
              "text": "@notice This method can be called only once, after the MPC address is set Bridge is unpaused.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param MPCAddress Address that will be set as MPC address."
            },
            "functionSelector": "d2e5fae9",
            "id": 8719,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8684,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8683,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "15788:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "15788:11:51"
              }
            ],
            "name": "endKeygen",
            "nameLocation": "15749:9:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8681,
                  "mutability": "mutable",
                  "name": "MPCAddress",
                  "nameLocation": "15767:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8719,
                  "src": "15759:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15759:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15758:20:51"
            },
            "returnParameters": {
              "id": 8685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15800:0:51"
            },
            "scope": 8866,
            "src": "15740:303:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8731,
              "nodeType": "Block",
              "src": "16570:38:51",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8728,
                        "name": "hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8722,
                        "src": "16596:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8727,
                      "name": "KeyRefresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8013,
                      "src": "16585:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 8729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16585:16:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8730,
                  "nodeType": "EmitStatement",
                  "src": "16580:21:51"
                }
              ]
            },
            "documentation": {
              "id": 8720,
              "nodeType": "StructuredDocumentation",
              "src": "16049:455:51",
              "text": "@notice It's used to trigger the belonging process on the MPC side.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param hash Topology hash which prevents changes during refresh process."
            },
            "functionSelector": "d8236744",
            "id": 8732,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8725,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8724,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "16558:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "16558:11:51"
              }
            ],
            "name": "refreshKey",
            "nameLocation": "16518:10:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8722,
                  "mutability": "mutable",
                  "name": "hash",
                  "nameLocation": "16543:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8732,
                  "src": "16529:18:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8721,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "16529:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16528:20:51"
            },
            "returnParameters": {
              "id": 8726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16570:0:51"
            },
            "scope": 8866,
            "src": "16509:99:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8744,
              "nodeType": "Block",
              "src": "17050:35:51",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8741,
                        "name": "txHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8735,
                        "src": "17071:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8740,
                      "name": "Retry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8017,
                      "src": "17065:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 8742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17065:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8743,
                  "nodeType": "EmitStatement",
                  "src": "17060:18:51"
                }
              ]
            },
            "documentation": {
              "id": 8733,
              "nodeType": "StructuredDocumentation",
              "src": "16614:373:51",
              "text": "@notice This method is used to trigger the process for retrying failed deposits on the MPC side.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param txHash Transaction hash which contains deposit that should be retried"
            },
            "functionSelector": "366b4885",
            "id": 8745,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8738,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8737,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "17038:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "17038:11:51"
              }
            ],
            "name": "retry",
            "nameLocation": "17001:5:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8735,
                  "mutability": "mutable",
                  "name": "txHash",
                  "nameLocation": "17021:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8745,
                  "src": "17007:20:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8734,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "17007:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17006:22:51"
            },
            "returnParameters": {
              "id": 8739,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17050:0:51"
            },
            "scope": 8866,
            "src": "16992:93:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8773,
              "nodeType": "Block",
              "src": "17468:99:51",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 8755,
                            "name": "usedNonces",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7965,
                            "src": "17485:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                              "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                            }
                          },
                          "id": 8757,
                          "indexExpression": {
                            "id": 8756,
                            "name": "domainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8748,
                            "src": "17496:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17485:20:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8761,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8758,
                            "name": "depositNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8750,
                            "src": "17506:12:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "hexValue": "323536",
                            "id": 8759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17521:3:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_256_by_1",
                              "typeString": "int_const 256"
                            },
                            "value": "256"
                          },
                          "src": "17506:18:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17485:40:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 8762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17529:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 8763,
                                    "name": "depositNonce",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8750,
                                    "src": "17535:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 8764,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "17550:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "17535:18:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8766,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "17534:20:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "17529:25:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8768,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "17528:27:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17485:70:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8770,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17559:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17485:75:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8754,
                  "id": 8772,
                  "nodeType": "Return",
                  "src": "17478:82:51"
                }
              ]
            },
            "documentation": {
              "id": 8746,
              "nodeType": "StructuredDocumentation",
              "src": "17091:279:51",
              "text": "@notice Returns a boolean value.\n@param domainID ID of chain deposit originated from.\n@param depositNonce ID of deposit generated by origin Bridge contract.\n@return Boolean value depending if deposit nonce has already been used or not."
            },
            "functionSelector": "9ae0bf45",
            "id": 8774,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isProposalExecuted",
            "nameLocation": "17384:18:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8751,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8748,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "17409:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17403:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8747,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "17403:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8750,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "17427:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17419:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8749,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17419:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17402:38:51"
            },
            "returnParameters": {
              "id": 8754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8753,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17462:4:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8752,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17462:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17461:6:51"
            },
            "scope": 8866,
            "src": "17375:192:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8864,
              "nodeType": "Block",
              "src": "17955:694:51",
              "statements": [
                {
                  "assignments": [
                    8790
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8790,
                      "mutability": "mutable",
                      "name": "keccakData",
                      "nameLocation": "17982:10:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8864,
                      "src": "17965:27:51",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8788,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17965:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8789,
                        "nodeType": "ArrayTypeName",
                        "src": "17965:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8797,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8794,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8779,
                          "src": "18009:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          }
                        },
                        "id": 8795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "18009:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "17995:13:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8791,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17999:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8792,
                        "nodeType": "ArrayTypeName",
                        "src": "17999:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 8796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17995:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17965:61:51"
                },
                {
                  "body": {
                    "id": 8838,
                    "nodeType": "Block",
                    "src": "18083:341:51",
                    "statements": [
                      {
                        "expression": {
                          "id": 8836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8809,
                              "name": "keccakData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8790,
                              "src": "18097:10:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 8811,
                            "indexExpression": {
                              "id": 8810,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8799,
                              "src": "18108:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "18097:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8815,
                                    "name": "_PROPOSAL_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7928,
                                    "src": "18172:18:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8816,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18212:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8818,
                                      "indexExpression": {
                                        "id": 8817,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18222:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18212:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8819,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "originDomainID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7940,
                                    "src": "18212:27:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8820,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18261:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8822,
                                      "indexExpression": {
                                        "id": 8821,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18271:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18261:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8823,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "depositNonce",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7942,
                                    "src": "18261:25:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8824,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18308:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8826,
                                      "indexExpression": {
                                        "id": 8825,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18318:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18308:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8827,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "resourceID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7944,
                                    "src": "18308:23:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8829,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8779,
                                            "src": "18363:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8831,
                                          "indexExpression": {
                                            "id": 8830,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8799,
                                            "src": "18373:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "18363:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8832,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7946,
                                        "src": "18363:17:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8828,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967288,
                                      "src": "18353:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 8833,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18353:28:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8813,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "18140:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 8814,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "18140:10:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 8834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18140:259:51",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 8812,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "18113:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 8835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18113:300:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "18097:316:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8837,
                        "nodeType": "ExpressionStatement",
                        "src": "18097:316:51"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8802,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8799,
                      "src": "18056:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8803,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8779,
                        "src": "18060:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "18060:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18056:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8839,
                  "initializationExpression": {
                    "assignments": [
                      8799
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8799,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "18049:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 8839,
                        "src": "18041:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18041:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8801,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18053:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "18041:13:51"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "18078:3:51",
                      "subExpression": {
                        "id": 8806,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8799,
                        "src": "18078:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8808,
                    "nodeType": "ExpressionStatement",
                    "src": "18078:3:51"
                  },
                  "nodeType": "ForStatement",
                  "src": "18036:388:51"
                },
                {
                  "assignments": [
                    8841
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8841,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "18442:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8864,
                      "src": "18434:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8840,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18434:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8859,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8857,
                        "name": "signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "18594:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8846,
                                    "name": "_PROPOSALS_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7923,
                                    "src": "18513:19:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 8850,
                                            "name": "keccakData",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8790,
                                            "src": "18561:10:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                              "typeString": "bytes32[] memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                              "typeString": "bytes32[] memory"
                                            }
                                          ],
                                          "expression": {
                                            "id": 8848,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967295,
                                            "src": "18544:3:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 8849,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "src": "18544:16:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 8851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18544:28:51",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8847,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967288,
                                      "src": "18534:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 8852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18534:39:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8844,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "18489:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 8845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "18489:10:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 8853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18489:85:51",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 8843,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "18479:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 8854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18479:96:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 8842,
                          "name": "_hashTypedDataV4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6142,
                          "src": "18451:16:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32) view returns (bytes32)"
                          }
                        },
                        "id": 8855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18451:134:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 8856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5738,
                      "src": "18451:142:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 8858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18451:153:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18434:170:51"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8860,
                      "name": "signer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8841,
                      "src": "18621:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 8861,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "18631:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18621:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8863,
                  "nodeType": "Return",
                  "src": "18614:28:51"
                }
              ]
            },
            "documentation": {
              "id": 8775,
              "nodeType": "StructuredDocumentation",
              "src": "17573:279:51",
              "text": "@notice Verifies that proposal data is signed by MPC address.\n@param proposals array of Proposals.\n@param signature signature bytes memory signature composed of MPC key shares.\n@return Boolean value depending if signer is vaild or not."
            },
            "functionSelector": "a546e8a1",
            "id": 8865,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nameLocation": "17866:6:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8779,
                  "mutability": "mutable",
                  "name": "proposals",
                  "nameLocation": "17891:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17873:27:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Bridge.Proposal[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8777,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 8776,
                        "name": "Proposal",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 7947,
                        "src": "17873:8:51"
                      },
                      "referencedDeclaration": 7947,
                      "src": "17873:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                        "typeString": "struct Bridge.Proposal"
                      }
                    },
                    "id": 8778,
                    "nodeType": "ArrayTypeName",
                    "src": "17873:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                      "typeString": "struct Bridge.Proposal[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8781,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "17917:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17902:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8780,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "17902:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17872:55:51"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17949:4:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17949:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17948:6:51"
            },
            "scope": 8866,
            "src": "17857:792:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8867,
        "src": "621:18030:51",
        "usedErrors": [
          8023,
          8025,
          8027,
          8029,
          8031,
          8033,
          8035,
          8037,
          8039,
          8041
        ]
      }
    ],
    "src": "81:18571:51"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/Bridge.sol",
    "exportedSymbols": {
      "Bridge": [
        8866
      ],
      "Context": [
        5305
      ],
      "ECDSA": [
        5989
      ],
      "EIP712": [
        6143
      ],
      "IAccessControlSegregator": [
        18093
      ],
      "IERCHandler": [
        18195
      ],
      "IFeeHandler": [
        18265
      ],
      "IHandler": [
        18301
      ],
      "Pausable": [
        19105
      ],
      "Strings": [
        5582
      ]
    },
    "id": 8867,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7900,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:51"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "id": 7901,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 5990,
        "src": "106:62:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
        "file": "@openzeppelin/contracts/utils/Context.sol",
        "id": 7902,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 5306,
        "src": "169:51:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol",
        "file": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol",
        "id": 7903,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 6144,
        "src": "221:69:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/Pausable.sol",
        "file": "./utils/Pausable.sol",
        "id": 7904,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 19106,
        "src": "291:30:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
        "file": "./interfaces/IERCHandler.sol",
        "id": 7905,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18196,
        "src": "324:38:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "./interfaces/IHandler.sol",
        "id": 7906,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18302,
        "src": "363:35:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IFeeHandler.sol",
        "file": "./interfaces/IFeeHandler.sol",
        "id": 7907,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18266,
        "src": "399:38:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IAccessControlSegregator.sol",
        "file": "./interfaces/IAccessControlSegregator.sol",
        "id": 7908,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8867,
        "sourceUnit": 18094,
        "src": "438:51:51",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7910,
              "name": "Pausable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19105,
              "src": "640:8:51"
            },
            "id": 7911,
            "nodeType": "InheritanceSpecifier",
            "src": "640:8:51"
          },
          {
            "baseName": {
              "id": 7912,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5305,
              "src": "650:7:51"
            },
            "id": 7913,
            "nodeType": "InheritanceSpecifier",
            "src": "650:7:51"
          },
          {
            "baseName": {
              "id": 7914,
              "name": "EIP712",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 6143,
              "src": "659:6:51"
            },
            "id": 7915,
            "nodeType": "InheritanceSpecifier",
            "src": "659:6:51"
          }
        ],
        "canonicalName": "Bridge",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 7909,
          "nodeType": "StructuredDocumentation",
          "src": "491:129:51",
          "text": "@title Facilitates deposits and creation of deposit proposals, and deposit executions.\n@author ChainSafe Systems."
        },
        "fullyImplemented": true,
        "id": 8866,
        "linearizedBaseContracts": [
          8866,
          6143,
          5305,
          19105
        ],
        "name": "Bridge",
        "nameLocation": "630:6:51",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7918,
            "libraryName": {
              "id": 7916,
              "name": "ECDSA",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5989,
              "src": "678:5:51"
            },
            "nodeType": "UsingForDirective",
            "src": "672:24:51",
            "typeName": {
              "id": 7917,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "688:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 7923,
            "mutability": "constant",
            "name": "_PROPOSALS_TYPEHASH",
            "nameLocation": "727:19:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "702:179:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7919,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "702:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "50726f706f73616c732850726f706f73616c5b5d2070726f706f73616c732950726f706f73616c2875696e7438206f726967696e446f6d61696e49442c75696e743634206465706f7369744e6f6e63652c62797465733332207265736f7572636549442c6279746573206461746129",
                  "id": 7921,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "767:113:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5",
                    "typeString": "literal_string \"Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  },
                  "value": "Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_989d14110ba109ccad392cc18511d1f6ae3a85165c5960e49d72c2c67682fde5",
                    "typeString": "literal_string \"Proposals(Proposal[] proposals)Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  }
                ],
                "id": 7920,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "757:9:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7922,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "757:124:51",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 7928,
            "mutability": "constant",
            "name": "_PROPOSAL_TYPEHASH",
            "nameLocation": "912:18:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "887:147:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 7924,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "887:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "50726f706f73616c2875696e7438206f726967696e446f6d61696e49442c75696e743634206465706f7369744e6f6e63652c62797465733332207265736f7572636549442c6279746573206461746129",
                  "id": 7926,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "951:82:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_cc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a70",
                    "typeString": "literal_string \"Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  },
                  "value": "Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_cc13634e956dd3d4ec8d808ee8bf294e1cd05a38f63fe7f234b079a0a4c36a70",
                    "typeString": "literal_string \"Proposal(uint8 originDomainID,uint64 depositNonce,bytes32 resourceID,bytes data)\""
                  }
                ],
                "id": 7925,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "941:9:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 7927,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "941:93:51",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "9dd694f4",
            "id": 7930,
            "mutability": "immutable",
            "name": "_domainID",
            "nameLocation": "1067:9:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1042:34:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 7929,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1042:5:51",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "059972d2",
            "id": 7932,
            "mutability": "mutable",
            "name": "_MPCAddress",
            "nameLocation": "1097:11:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1082:26:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7931,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1082:7:51",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "fe4648f4",
            "id": 7935,
            "mutability": "mutable",
            "name": "_feeHandler",
            "nameLocation": "1134:11:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1115:30:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IFeeHandler_$18265",
              "typeString": "contract IFeeHandler"
            },
            "typeName": {
              "id": 7934,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7933,
                "name": "IFeeHandler",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 18265,
                "src": "1115:11:51"
              },
              "referencedDeclaration": 18265,
              "src": "1115:11:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                "typeString": "contract IFeeHandler"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "44e8e430",
            "id": 7938,
            "mutability": "mutable",
            "name": "_accessControl",
            "nameLocation": "1184:14:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1152:46:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
              "typeString": "contract IAccessControlSegregator"
            },
            "typeName": {
              "id": 7937,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 7936,
                "name": "IAccessControlSegregator",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 18093,
                "src": "1152:24:51"
              },
              "referencedDeclaration": 18093,
              "src": "1152:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                "typeString": "contract IAccessControlSegregator"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "Bridge.Proposal",
            "id": 7947,
            "members": [
              {
                "constant": false,
                "id": 7940,
                "mutability": "mutable",
                "name": "originDomainID",
                "nameLocation": "1239:14:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1231:22:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7939,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "1231:5:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7942,
                "mutability": "mutable",
                "name": "depositNonce",
                "nameLocation": "1271:12:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1263:20:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 7941,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1263:6:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7944,
                "mutability": "mutable",
                "name": "resourceID",
                "nameLocation": "1301:10:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1293:18:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 7943,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1293:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7946,
                "mutability": "mutable",
                "name": "data",
                "nameLocation": "1329:4:51",
                "nodeType": "VariableDeclaration",
                "scope": 7947,
                "src": "1321:12:51",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 7945,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "1321:5:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Proposal",
            "nameLocation": "1212:8:51",
            "nodeType": "StructDefinition",
            "scope": 8866,
            "src": "1205:135:51",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "4b0b919d",
            "id": 7951,
            "mutability": "mutable",
            "name": "_depositCounts",
            "nameLocation": "1427:14:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1395:46:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
              "typeString": "mapping(uint8 => uint64)"
            },
            "typeName": {
              "id": 7950,
              "keyType": {
                "id": 7948,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1403:5:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1395:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                "typeString": "mapping(uint8 => uint64)"
              },
              "valueType": {
                "id": 7949,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1412:6:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "84db809f",
            "id": 7955,
            "mutability": "mutable",
            "name": "_resourceIDToHandlerAddress",
            "nameLocation": "1519:27:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1484:62:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 7954,
              "keyType": {
                "id": 7952,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1492:7:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1484:27:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 7953,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1503:7:51",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "f8c39e44",
            "id": 7959,
            "mutability": "mutable",
            "name": "isValidForwarder",
            "nameLocation": "1621:16:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1589:48:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 7958,
              "keyType": {
                "id": 7956,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1597:7:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1589:24:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 7957,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1608:4:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "08a64104",
            "id": 7965,
            "mutability": "mutable",
            "name": "usedNonces",
            "nameLocation": "1756:10:51",
            "nodeType": "VariableDeclaration",
            "scope": 8866,
            "src": "1703:63:51",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
              "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
            },
            "typeName": {
              "id": 7964,
              "keyType": {
                "id": 7960,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1711:5:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1703:45:51",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
              },
              "valueType": {
                "id": 7963,
                "keyType": {
                  "id": 7961,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1728:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "1720:27:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "valueType": {
                  "id": 7962,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1739:7:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 7969,
            "name": "FeeHandlerChanged",
            "nameLocation": "1779:17:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7967,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newFeeHandler",
                  "nameLocation": "1805:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7969,
                  "src": "1797:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1797:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1796:23:51"
            },
            "src": "1773:47:51"
          },
          {
            "anonymous": false,
            "id": 7973,
            "name": "AccessControlChanged",
            "nameLocation": "1831:20:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7971,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newAccessControl",
                  "nameLocation": "1860:16:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7973,
                  "src": "1852:24:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1852:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1851:26:51"
            },
            "src": "1825:53:51"
          },
          {
            "anonymous": false,
            "id": 7987,
            "name": "Deposit",
            "nameLocation": "1889:7:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7975,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "1914:19:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1906:27:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7974,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1906:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7977,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "1951:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1943:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7976,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7979,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "1979:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "1971:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 7978,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1971:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7981,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "2017:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2001:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2001:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7983,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2039:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2031:12:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7982,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2031:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7985,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "2061:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7987,
                  "src": "2053:23:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7984,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1896:186:51"
            },
            "src": "1883:200:51"
          },
          {
            "anonymous": false,
            "id": 7997,
            "name": "ProposalExecution",
            "nameLocation": "2094:17:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7989,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "originDomainID",
                  "nameLocation": "2129:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2121:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7988,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2121:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7991,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "2161:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2153:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 7990,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2153:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7993,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dataHash",
                  "nameLocation": "2191:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2183:16:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7992,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2183:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7995,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "2215:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 7997,
                  "src": "2209:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7994,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2209:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2111:125:51"
            },
            "src": "2088:149:51"
          },
          {
            "anonymous": false,
            "id": 8005,
            "name": "FailedHandlerExecution",
            "nameLocation": "2249:22:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7999,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "lowLevelData",
                  "nameLocation": "2288:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2281:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7998,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2281:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8001,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "originDomainID",
                  "nameLocation": "2317:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2310:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8000,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2310:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8003,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "2348:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8005,
                  "src": "2341:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8002,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2341:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2271:95:51"
            },
            "src": "2243:124:51"
          },
          {
            "anonymous": false,
            "id": 8007,
            "name": "StartKeygen",
            "nameLocation": "2379:11:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2390:2:51"
            },
            "src": "2373:20:51"
          },
          {
            "anonymous": false,
            "id": 8009,
            "name": "EndKeygen",
            "nameLocation": "2405:9:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8008,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2414:2:51"
            },
            "src": "2399:18:51"
          },
          {
            "anonymous": false,
            "id": 8013,
            "name": "KeyRefresh",
            "nameLocation": "2429:10:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8011,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "hash",
                  "nameLocation": "2447:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8013,
                  "src": "2440:11:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8010,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2440:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2439:13:51"
            },
            "src": "2423:30:51"
          },
          {
            "anonymous": false,
            "id": 8017,
            "name": "Retry",
            "nameLocation": "2465:5:51",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8015,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "txHash",
                  "nameLocation": "2478:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8017,
                  "src": "2471:13:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8014,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2471:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2470:15:51"
            },
            "src": "2459:27:51"
          },
          {
            "id": 8023,
            "name": "AccessNotAllowed",
            "nameLocation": "2498:16:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8019,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2523:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2515:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8018,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8021,
                  "mutability": "mutable",
                  "name": "funcSig",
                  "nameLocation": "2538:7:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8023,
                  "src": "2531:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8020,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2514:32:51"
            },
            "src": "2492:55:51"
          },
          {
            "id": 8025,
            "name": "ResourceIDNotMappedToHandler",
            "nameLocation": "2559:28:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2587:2:51"
            },
            "src": "2553:37:51"
          },
          {
            "id": 8027,
            "name": "DepositToCurrentDomain",
            "nameLocation": "2602:22:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2624:2:51"
            },
            "src": "2596:31:51"
          },
          {
            "id": 8029,
            "name": "InvalidProposalSigner",
            "nameLocation": "2639:21:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8028,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2660:2:51"
            },
            "src": "2633:30:51"
          },
          {
            "id": 8031,
            "name": "EmptyProposalsArray",
            "nameLocation": "2675:19:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8030,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2694:2:51"
            },
            "src": "2669:28:51"
          },
          {
            "id": 8033,
            "name": "NonceDecrementsNotAllowed",
            "nameLocation": "2709:25:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8032,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2734:2:51"
            },
            "src": "2703:34:51"
          },
          {
            "id": 8035,
            "name": "MPCAddressAlreadySet",
            "nameLocation": "2749:20:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2769:2:51"
            },
            "src": "2743:29:51"
          },
          {
            "id": 8037,
            "name": "MPCAddressNotSet",
            "nameLocation": "2784:16:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8036,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2800:2:51"
            },
            "src": "2778:25:51"
          },
          {
            "id": 8039,
            "name": "MPCAddressIsNotUpdatable",
            "nameLocation": "2815:24:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2839:2:51"
            },
            "src": "2809:33:51"
          },
          {
            "id": 8041,
            "name": "MPCAddressZeroAddress",
            "nameLocation": "2854:21:51",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8040,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2875:2:51"
            },
            "src": "2848:30:51"
          },
          {
            "body": {
              "id": 8051,
              "nodeType": "Block",
              "src": "2907:63:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8044,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2930:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "src": "2930:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8046,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "2939:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8047,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2939:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8043,
                      "name": "_onlyAllowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8072,
                      "src": "2917:12:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes4_$_t_address_$returns$__$",
                        "typeString": "function (bytes4,address) view"
                      }
                    },
                    "id": 8048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2917:35:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8049,
                  "nodeType": "ExpressionStatement",
                  "src": "2917:35:51"
                },
                {
                  "id": 8050,
                  "nodeType": "PlaceholderStatement",
                  "src": "2962:1:51"
                }
              ]
            },
            "id": 8052,
            "name": "onlyAllowed",
            "nameLocation": "2893:11:51",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2904:2:51"
            },
            "src": "2884:86:51",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8071,
              "nodeType": "Block",
              "src": "3039:97:51",
              "statements": [
                {
                  "condition": {
                    "id": 8064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3053:38:51",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 8061,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8054,
                          "src": "3079:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        {
                          "id": 8062,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8056,
                          "src": "3084:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 8059,
                          "name": "_accessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "3054:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                            "typeString": "contract IAccessControlSegregator"
                          }
                        },
                        "id": 8060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasAccess",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18092,
                        "src": "3054:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes4_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes4,address) view external returns (bool)"
                        }
                      },
                      "id": 8063,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3054:37:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8070,
                  "nodeType": "IfStatement",
                  "src": "3049:80:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 8066,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8056,
                          "src": "3117:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 8067,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8054,
                          "src": "3125:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "id": 8065,
                        "name": "AccessNotAllowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8023,
                        "src": "3100:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$_t_bytes4_$returns$__$",
                          "typeString": "function (address,bytes4) pure"
                        }
                      },
                      "id": 8068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3100:29:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8069,
                    "nodeType": "RevertStatement",
                    "src": "3093:36:51"
                  }
                }
              ]
            },
            "id": 8072,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyAllowed",
            "nameLocation": "2985:12:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8054,
                  "mutability": "mutable",
                  "name": "sig",
                  "nameLocation": "3005:3:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8072,
                  "src": "2998:10:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8053,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2998:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8056,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "3018:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8072,
                  "src": "3010:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3010:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2997:28:51"
            },
            "returnParameters": {
              "id": 8058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3039:0:51"
            },
            "scope": 8866,
            "src": "2976:160:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              5295
            ],
            "body": {
              "id": 8097,
              "nodeType": "Block",
              "src": "3205:252:51",
              "statements": [
                {
                  "assignments": [
                    8079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8079,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "3223:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8097,
                      "src": "3215:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8078,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3215:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8082,
                  "initialValue": {
                    "expression": {
                      "id": 8080,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967281,
                      "src": "3232:3:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 8081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "3232:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3215:27:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 8083,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "3256:3:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "3256:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 8085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "3256:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "hexValue": "3230",
                        "id": 8086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3275:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      },
                      "src": "3256:21:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 8088,
                        "name": "isValidForwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7959,
                        "src": "3281:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 8090,
                      "indexExpression": {
                        "id": 8089,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8079,
                        "src": "3298:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3281:24:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3256:49:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8094,
                  "nodeType": "IfStatement",
                  "src": "3252:176:51",
                  "trueBody": {
                    "id": 8093,
                    "nodeType": "Block",
                    "src": "3307:121:51",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3330:88:51",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3348:56:51",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3362:2:51",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "calldatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "3383:12:51"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3383:14:51"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3399:2:51",
                                            "type": "",
                                            "value": "20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3379:3:51"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3379:23:51"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3366:12:51"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3366:37:51"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3358:3:51"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3358:46:51"
                              },
                              "variableNames": [
                                {
                                  "name": "signer",
                                  "nodeType": "YulIdentifier",
                                  "src": "3348:6:51"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 8079,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3348:6:51",
                            "valueSize": 1
                          }
                        ],
                        "id": 8092,
                        "nodeType": "InlineAssembly",
                        "src": "3321:97:51"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 8095,
                    "name": "signer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8079,
                    "src": "3444:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8077,
                  "id": 8096,
                  "nodeType": "Return",
                  "src": "3437:13:51"
                }
              ]
            },
            "id": 8098,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_msgSender",
            "nameLocation": "3151:10:51",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8074,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3173:8:51"
            },
            "parameters": {
              "id": 8073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3161:2:51"
            },
            "returnParameters": {
              "id": 8077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8076,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8098,
                  "src": "3196:7:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8075,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3195:9:51"
            },
            "scope": 8866,
            "src": "3142:315:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8125,
              "nodeType": "Block",
              "src": "3874:134:51",
              "statements": [
                {
                  "expression": {
                    "id": 8112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8110,
                      "name": "_domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7930,
                      "src": "3884:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8111,
                      "name": "domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8101,
                      "src": "3896:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "3884:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 8113,
                  "nodeType": "ExpressionStatement",
                  "src": "3884:20:51"
                },
                {
                  "expression": {
                    "id": 8118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8114,
                      "name": "_accessControl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7938,
                      "src": "3914:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8116,
                          "name": "accessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8103,
                          "src": "3956:13:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8115,
                        "name": "IAccessControlSegregator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18093,
                        "src": "3931:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAccessControlSegregator_$18093_$",
                          "typeString": "type(contract IAccessControlSegregator)"
                        }
                      },
                      "id": 8117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3931:39:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "src": "3914:56:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                      "typeString": "contract IAccessControlSegregator"
                    }
                  },
                  "id": 8119,
                  "nodeType": "ExpressionStatement",
                  "src": "3914:56:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8121,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "3988:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3988:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8120,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19087,
                      "src": "3981:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3981:20:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8124,
                  "nodeType": "ExpressionStatement",
                  "src": "3981:20:51"
                }
              ]
            },
            "documentation": {
              "id": 8099,
              "nodeType": "StructuredDocumentation",
              "src": "3463:328:51",
              "text": "@notice Initializes Bridge, creates and grants {_msgSender()} the admin role, sets access control\ncontract for bridge and sets the inital state of the Bridge to paused.\n@param domainID ID of chain the Bridge contract exists on.\n@param accessControl Address of access control contract."
            },
            "id": 8126,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "hexValue": "427269646765",
                    "id": 8106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3855:8:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7aa5ae620294318af92bf4e2b2a729646c932a80312a5fa630da993a2ef5cc10",
                      "typeString": "literal_string \"Bridge\""
                    },
                    "value": "Bridge"
                  },
                  {
                    "hexValue": "332e312e30",
                    "id": 8107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3865:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_0e23d0b508e2034d01a5c31f12e9d9bbb31708c5518057dde31201ab93b17cef",
                      "typeString": "literal_string \"3.1.0\""
                    },
                    "value": "3.1.0"
                  }
                ],
                "id": 8108,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 8105,
                  "name": "EIP712",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 6143,
                  "src": "3848:6:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "3848:25:51"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8101,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "3815:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8126,
                  "src": "3809:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8100,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3809:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8103,
                  "mutability": "mutable",
                  "name": "accessControl",
                  "nameLocation": "3833:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8126,
                  "src": "3825:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3825:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3808:39:51"
            },
            "returnParameters": {
              "id": 8109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3874:0:51"
            },
            "scope": 8866,
            "src": "3796:212:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8137,
              "nodeType": "Block",
              "src": "4341:37:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8133,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "4358:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4358:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8132,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19087,
                      "src": "4351:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4351:20:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8136,
                  "nodeType": "ExpressionStatement",
                  "src": "4351:20:51"
                }
              ]
            },
            "documentation": {
              "id": 8127,
              "nodeType": "StructuredDocumentation",
              "src": "4014:270:51",
              "text": "@notice Pauses deposits, proposal creation and voting, and deposit executions.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract."
            },
            "functionSelector": "80ae1c28",
            "id": 8138,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8130,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8129,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "4329:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "4329:11:51"
              }
            ],
            "name": "adminPauseTransfers",
            "nameLocation": "4298:19:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4317:2:51"
            },
            "returnParameters": {
              "id": 8131,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4341:0:51"
            },
            "scope": 8866,
            "src": "4289:89:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8159,
              "nodeType": "Block",
              "src": "4787:105:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8144,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "4801:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4824:1:51",
                          "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": 8146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4816:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8145,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4816:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4816:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4801:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8153,
                  "nodeType": "IfStatement",
                  "src": "4797:56:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8150,
                        "name": "MPCAddressNotSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8037,
                        "src": "4835:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8151,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4835:18:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8152,
                    "nodeType": "RevertStatement",
                    "src": "4828:25:51"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8155,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "4872:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4872:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8154,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19104,
                      "src": "4863:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4863:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8158,
                  "nodeType": "ExpressionStatement",
                  "src": "4863:22:51"
                }
              ]
            },
            "documentation": {
              "id": 8139,
              "nodeType": "StructuredDocumentation",
              "src": "4384:344:51",
              "text": "@notice Unpauses deposits, proposal creation and voting, and deposit executions.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@notice MPC address has to be set before Bridge can be unpaused"
            },
            "functionSelector": "ffaac0eb",
            "id": 8160,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8142,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8141,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "4775:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "4775:11:51"
              }
            ],
            "name": "adminUnpauseTransfers",
            "nameLocation": "4742:21:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4763:2:51"
            },
            "returnParameters": {
              "id": 8143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4787:0:51"
            },
            "scope": 8866,
            "src": "4733:159:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8195,
              "nodeType": "Block",
              "src": "5737:190:51",
              "statements": [
                {
                  "expression": {
                    "id": 8178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8174,
                        "name": "_resourceIDToHandlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7955,
                        "src": "5747:27:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 8176,
                      "indexExpression": {
                        "id": 8175,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "5775:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5747:39:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8177,
                      "name": "handlerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8163,
                      "src": "5789:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5747:56:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8179,
                  "nodeType": "ExpressionStatement",
                  "src": "5747:56:51"
                },
                {
                  "assignments": [
                    8182
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8182,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "5822:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8195,
                      "src": "5813:16:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IHandler_$18301",
                        "typeString": "contract IHandler"
                      },
                      "typeName": {
                        "id": 8181,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8180,
                          "name": "IHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18301,
                          "src": "5813:8:51"
                        },
                        "referencedDeclaration": 18301,
                        "src": "5813:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8186,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8184,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "5841:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8183,
                      "name": "IHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "5832:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                        "typeString": "type(contract IHandler)"
                      }
                    },
                    "id": 8185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5832:24:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IHandler_$18301",
                      "typeString": "contract IHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5813:43:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8190,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "5886:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 8191,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8167,
                        "src": "5898:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8192,
                        "name": "args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8169,
                        "src": "5915:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "id": 8187,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8182,
                        "src": "5866:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "id": 8189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResource",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18300,
                      "src": "5866:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,bytes memory) external"
                      }
                    },
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5866:54:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "5866:54:51"
                }
              ]
            },
            "documentation": {
              "id": 8161,
              "nodeType": "StructuredDocumentation",
              "src": "4898:697:51",
              "text": "@notice Sets a new resource for handler contracts that use the IERCHandler interface,\nand maps the {handlerAddress} to {resourceID} in {_resourceIDToHandlerAddress}.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler resource will be set for.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Additional data to be passed to specified handler."
            },
            "functionSelector": "8a3234c7",
            "id": 8196,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8172,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8171,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "5725:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "5725:11:51"
              }
            ],
            "name": "adminSetResource",
            "nameLocation": "5609:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8163,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "5634:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5626:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5626:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "5658:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5650:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5650:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8167,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "5678:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5670:23:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5670:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8169,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "5710:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8196,
                  "src": "5695:19:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8168,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5695:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5625:90:51"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5737:0:51"
            },
            "scope": 8866,
            "src": "5600:327:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8219,
              "nodeType": "Block",
              "src": "6504:109:51",
              "statements": [
                {
                  "assignments": [
                    8208
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8208,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "6526:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8219,
                      "src": "6514:19:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERCHandler_$18195",
                        "typeString": "contract IERCHandler"
                      },
                      "typeName": {
                        "id": 8207,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8206,
                          "name": "IERCHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18195,
                          "src": "6514:11:51"
                        },
                        "referencedDeclaration": 18195,
                        "src": "6514:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8212,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8210,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8199,
                        "src": "6548:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8209,
                      "name": "IERCHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18195,
                      "src": "6536:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                        "typeString": "type(contract IERCHandler)"
                      }
                    },
                    "id": 8211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6536:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERCHandler_$18195",
                      "typeString": "contract IERCHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6514:49:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8216,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8201,
                        "src": "6593:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 8213,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8208,
                        "src": "6573:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 8215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setBurnable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18180,
                      "src": "6573:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 8217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6573:33:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8218,
                  "nodeType": "ExpressionStatement",
                  "src": "6573:33:51"
                }
              ]
            },
            "documentation": {
              "id": 8197,
              "nodeType": "StructuredDocumentation",
              "src": "5933:473:51",
              "text": "@notice Sets a resource as burnable for handler contracts that use the IERCHandler interface.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler resource will be set for.\n@param tokenAddress Address of contract to be called when a deposit is made and a deposited is executed."
            },
            "functionSelector": "8c0c2631",
            "id": 8220,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8204,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8203,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "6492:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "6492:11:51"
              }
            ],
            "name": "adminSetBurnable",
            "nameLocation": "6420:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8199,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "6445:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "6437:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6437:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8201,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "6469:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8220,
                  "src": "6461:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6461:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6436:46:51"
            },
            "returnParameters": {
              "id": 8205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6504:0:51"
            },
            "scope": 8866,
            "src": "6411:202:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8245,
              "nodeType": "Block",
              "src": "7050:142:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 8235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8231,
                          "name": "nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8225,
                          "src": "7068:5:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 8232,
                            "name": "_depositCounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7951,
                            "src": "7076:14:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                              "typeString": "mapping(uint8 => uint64)"
                            }
                          },
                          "id": 8234,
                          "indexExpression": {
                            "id": 8233,
                            "name": "domainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8223,
                            "src": "7091:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7076:24:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "7068:32:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "446f6573206e6f7420616c6c6f772064656372656d656e7473206f6620746865206e6f6e6365",
                        "id": 8236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7102:40:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8",
                          "typeString": "literal_string \"Does not allow decrements of the nonce\""
                        },
                        "value": "Does not allow decrements of the nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7122f19c70cb188c6a2cee5166a6322c6e1f2aa7931cca0265fb30152aec34e8",
                          "typeString": "literal_string \"Does not allow decrements of the nonce\""
                        }
                      ],
                      "id": 8230,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7060:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7060:83:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8238,
                  "nodeType": "ExpressionStatement",
                  "src": "7060:83:51"
                },
                {
                  "expression": {
                    "id": 8243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8239,
                        "name": "_depositCounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7951,
                        "src": "7153:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                          "typeString": "mapping(uint8 => uint64)"
                        }
                      },
                      "id": 8241,
                      "indexExpression": {
                        "id": 8240,
                        "name": "domainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8223,
                        "src": "7168:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7153:24:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8242,
                      "name": "nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8225,
                      "src": "7180:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7153:32:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 8244,
                  "nodeType": "ExpressionStatement",
                  "src": "7153:32:51"
                }
              ]
            },
            "documentation": {
              "id": 8221,
              "nodeType": "StructuredDocumentation",
              "src": "6619:345:51",
              "text": "@notice Sets the nonce for the specific domainID.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param domainID Domain ID for increasing nonce.\n@param nonce The nonce value to be set."
            },
            "functionSelector": "edc20c3c",
            "id": 8246,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8228,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8227,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "7038:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "7038:11:51"
              }
            ],
            "name": "adminSetDepositNonce",
            "nameLocation": "6978:20:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "7005:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8246,
                  "src": "6999:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6999:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8225,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "7022:5:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8246,
                  "src": "7015:12:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8224,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7015:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6998:30:51"
            },
            "returnParameters": {
              "id": 8229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7050:0:51"
            },
            "scope": 8866,
            "src": "6969:223:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8262,
              "nodeType": "Block",
              "src": "7623:52:51",
              "statements": [
                {
                  "expression": {
                    "id": 8260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8256,
                        "name": "isValidForwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7959,
                        "src": "7633:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 8258,
                      "indexExpression": {
                        "id": 8257,
                        "name": "forwarder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8249,
                        "src": "7650:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7633:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8259,
                      "name": "valid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8251,
                      "src": "7663:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7633:35:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8261,
                  "nodeType": "ExpressionStatement",
                  "src": "7633:35:51"
                }
              ]
            },
            "documentation": {
              "id": 8247,
              "nodeType": "StructuredDocumentation",
              "src": "7198:341:51",
              "text": "@notice Set a forwarder to be used.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param forwarder Forwarder address to be added.\n@param valid Decision for the specific forwarder."
            },
            "functionSelector": "d15ef64e",
            "id": 8263,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8254,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8253,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "7611:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "7611:11:51"
              }
            ],
            "name": "adminSetForwarder",
            "nameLocation": "7553:17:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8249,
                  "mutability": "mutable",
                  "name": "forwarder",
                  "nameLocation": "7579:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8263,
                  "src": "7571:17:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7571:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8251,
                  "mutability": "mutable",
                  "name": "valid",
                  "nameLocation": "7595:5:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8263,
                  "src": "7590:10:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8250,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7590:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7570:31:51"
            },
            "returnParameters": {
              "id": 8255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7623:0:51"
            },
            "scope": 8866,
            "src": "7544:131:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8281,
              "nodeType": "Block",
              "src": "8084:129:51",
              "statements": [
                {
                  "expression": {
                    "id": 8275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8271,
                      "name": "_accessControl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7938,
                      "src": "8094:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8273,
                          "name": "newAccessControl",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8266,
                          "src": "8136:16:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8272,
                        "name": "IAccessControlSegregator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18093,
                        "src": "8111:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAccessControlSegregator_$18093_$",
                          "typeString": "type(contract IAccessControlSegregator)"
                        }
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8111:42:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                        "typeString": "contract IAccessControlSegregator"
                      }
                    },
                    "src": "8094:59:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccessControlSegregator_$18093",
                      "typeString": "contract IAccessControlSegregator"
                    }
                  },
                  "id": 8276,
                  "nodeType": "ExpressionStatement",
                  "src": "8094:59:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8278,
                        "name": "newAccessControl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8266,
                        "src": "8189:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8277,
                      "name": "AccessControlChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "8168:20:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8168:38:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8280,
                  "nodeType": "EmitStatement",
                  "src": "8163:43:51"
                }
              ]
            },
            "documentation": {
              "id": 8264,
              "nodeType": "StructuredDocumentation",
              "src": "7681:317:51",
              "text": "@notice Changes access control contract address.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param newAccessControl Address {_accessControl} will be updated to."
            },
            "functionSelector": "9d33b6d4",
            "id": 8282,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8269,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8268,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "8072:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "8072:11:51"
              }
            ],
            "name": "adminChangeAccessControl",
            "nameLocation": "8012:24:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8266,
                  "mutability": "mutable",
                  "name": "newAccessControl",
                  "nameLocation": "8045:16:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8282,
                  "src": "8037:24:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8265,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8037:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8036:26:51"
            },
            "returnParameters": {
              "id": 8270,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8084:0:51"
            },
            "scope": 8866,
            "src": "8003:210:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8300,
              "nodeType": "Block",
              "src": "8615:104:51",
              "statements": [
                {
                  "expression": {
                    "id": 8294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8290,
                      "name": "_feeHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7935,
                      "src": "8625:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                        "typeString": "contract IFeeHandler"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8292,
                          "name": "newFeeHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8285,
                          "src": "8651:13:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8291,
                        "name": "IFeeHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18265,
                        "src": "8639:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IFeeHandler_$18265_$",
                          "typeString": "type(contract IFeeHandler)"
                        }
                      },
                      "id": 8293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8639:26:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                        "typeString": "contract IFeeHandler"
                      }
                    },
                    "src": "8625:40:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                      "typeString": "contract IFeeHandler"
                    }
                  },
                  "id": 8295,
                  "nodeType": "ExpressionStatement",
                  "src": "8625:40:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8297,
                        "name": "newFeeHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8285,
                        "src": "8698:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8296,
                      "name": "FeeHandlerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7969,
                      "src": "8680:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8680:32:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8299,
                  "nodeType": "EmitStatement",
                  "src": "8675:37:51"
                }
              ]
            },
            "documentation": {
              "id": 8283,
              "nodeType": "StructuredDocumentation",
              "src": "8219:316:51",
              "text": "@notice Changes deposit fee handler contract address.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param newFeeHandler Address {_feeHandler} will be updated to."
            },
            "functionSelector": "8b63aebf",
            "id": 8301,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8288,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8287,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "8603:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "8603:11:51"
              }
            ],
            "name": "adminChangeFeeHandler",
            "nameLocation": "8549:21:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8285,
                  "mutability": "mutable",
                  "name": "newFeeHandler",
                  "nameLocation": "8579:13:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8301,
                  "src": "8571:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8571:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8570:23:51"
            },
            "returnParameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8615:0:51"
            },
            "scope": 8866,
            "src": "8540:179:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8324,
              "nodeType": "Block",
              "src": "9238:98:51",
              "statements": [
                {
                  "assignments": [
                    8313
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8313,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "9260:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8324,
                      "src": "9248:19:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERCHandler_$18195",
                        "typeString": "contract IERCHandler"
                      },
                      "typeName": {
                        "id": 8312,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8311,
                          "name": "IERCHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18195,
                          "src": "9248:11:51"
                        },
                        "referencedDeclaration": 18195,
                        "src": "9248:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8317,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8315,
                        "name": "handlerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8304,
                        "src": "9282:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8314,
                      "name": "IERCHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18195,
                      "src": "9270:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                        "typeString": "type(contract IERCHandler)"
                      }
                    },
                    "id": 8316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9270:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERCHandler_$18195",
                      "typeString": "contract IERCHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9248:49:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8321,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8306,
                        "src": "9324:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 8318,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "9307:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 8320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18186,
                      "src": "9307:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 8322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9307:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8323,
                  "nodeType": "ExpressionStatement",
                  "src": "9307:22:51"
                }
              ]
            },
            "documentation": {
              "id": 8302,
              "nodeType": "StructuredDocumentation",
              "src": "8725:399:51",
              "text": "@notice Used to manually withdraw funds from ERC safes.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param handlerAddress Address of handler to withdraw from.\n@param data ABI-encoded withdrawal params relevant to the specified handler."
            },
            "functionSelector": "bd2a1820",
            "id": 8325,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8309,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8308,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "9226:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "9226:11:51"
              }
            ],
            "name": "adminWithdraw",
            "nameLocation": "9138:13:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8304,
                  "mutability": "mutable",
                  "name": "handlerAddress",
                  "nameLocation": "9169:14:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8325,
                  "src": "9161:22:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9161:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8306,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "9206:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8325,
                  "src": "9193:17:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8305,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9193:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9151:65:51"
            },
            "returnParameters": {
              "id": 8310,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9238:0:51"
            },
            "scope": 8866,
            "src": "9129:207:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8441,
              "nodeType": "Block",
              "src": "10477:932:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 8345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8343,
                      "name": "destinationDomainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8328,
                      "src": "10491:19:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 8344,
                      "name": "_domainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7930,
                      "src": "10514:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "10491:32:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8349,
                  "nodeType": "IfStatement",
                  "src": "10487:69:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8346,
                        "name": "DepositToCurrentDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8027,
                        "src": "10532:22:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10532:24:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8348,
                    "nodeType": "RevertStatement",
                    "src": "10525:31:51"
                  }
                },
                {
                  "assignments": [
                    8351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8351,
                      "mutability": "mutable",
                      "name": "sender",
                      "nameLocation": "10575:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "10567:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8350,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10567:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8354,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8352,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8098
                      ],
                      "referencedDeclaration": 8098,
                      "src": "10584:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 8353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10584:12:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10567:29:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 8357,
                          "name": "_feeHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7935,
                          "src": "10618:11:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                            "typeString": "contract IFeeHandler"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                            "typeString": "contract IFeeHandler"
                          }
                        ],
                        "id": 8356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10610:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10610:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10610:20:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10642:1:51",
                          "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": 8360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10634:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8359,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10634:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8362,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10634:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10610:34:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8387,
                    "nodeType": "Block",
                    "src": "10733:173:51",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8379,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8351,
                              "src": "10822:6:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8380,
                              "name": "_domainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7930,
                              "src": "10830:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 8381,
                              "name": "destinationDomainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8328,
                              "src": "10841:19:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 8382,
                              "name": "resourceID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8330,
                              "src": "10862:10:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 8383,
                              "name": "depositData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8332,
                              "src": "10874:11:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 8384,
                              "name": "feeData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8334,
                              "src": "10887:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "expression": {
                                "id": 8373,
                                "name": "_feeHandler",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7935,
                                "src": "10781:11:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IFeeHandler_$18265",
                                  "typeString": "contract IFeeHandler"
                                }
                              },
                              "id": 8375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collectFee",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18238,
                              "src": "10781:22:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                "typeString": "function (address,uint8,uint8,bytes32,bytes memory,bytes memory) payable external"
                              }
                            },
                            "id": 8378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "expression": {
                                  "id": 8376,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "10811:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 8377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "10811:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "10781:40:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$value",
                              "typeString": "function (address,uint8,uint8,bytes32,bytes memory,bytes memory) payable external"
                            }
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10781:114:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8386,
                        "nodeType": "ExpressionStatement",
                        "src": "10781:114:51"
                      }
                    ]
                  },
                  "id": 8388,
                  "nodeType": "IfStatement",
                  "src": "10606:300:51",
                  "trueBody": {
                    "id": 8372,
                    "nodeType": "Block",
                    "src": "10646:81:51",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8365,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "10668:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 8366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "10668:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 8367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10681:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10668:14:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "6e6f2046656548616e646c65722c206d73672e76616c756520213d2030",
                              "id": 8369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10684:31:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43",
                                "typeString": "literal_string \"no FeeHandler, msg.value != 0\""
                              },
                              "value": "no FeeHandler, msg.value != 0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00cceb6bdafc64edf8de8d46c411f06bf2e8405d041ec3c51b5fe11f78dc5b43",
                                "typeString": "literal_string \"no FeeHandler, msg.value != 0\""
                              }
                            ],
                            "id": 8364,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "10660:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10660:56:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8371,
                        "nodeType": "ExpressionStatement",
                        "src": "10660:56:51"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8390,
                      "mutability": "mutable",
                      "name": "handler",
                      "nameLocation": "10923:7:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "10915:15:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8389,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10915:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8394,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8391,
                      "name": "_resourceIDToHandlerAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7955,
                      "src": "10933:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8393,
                    "indexExpression": {
                      "id": 8392,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8330,
                      "src": "10961:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10933:39:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10915:57:51"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8395,
                      "name": "handler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8390,
                      "src": "10986:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11005:1:51",
                          "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": 8397,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10997:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8396,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10997:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10997:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10986:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8404,
                  "nodeType": "IfStatement",
                  "src": "10982:64:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8401,
                        "name": "ResourceIDNotMappedToHandler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8025,
                        "src": "11016:28:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11016:30:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8403,
                    "nodeType": "RevertStatement",
                    "src": "11009:37:51"
                  }
                },
                {
                  "expression": {
                    "id": 8410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8405,
                      "name": "depositNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8339,
                      "src": "11057:12:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "11072:37:51",
                      "subExpression": {
                        "baseExpression": {
                          "id": 8406,
                          "name": "_depositCounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7951,
                          "src": "11074:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_uint64_$",
                            "typeString": "mapping(uint8 => uint64)"
                          }
                        },
                        "id": 8408,
                        "indexExpression": {
                          "id": 8407,
                          "name": "destinationDomainID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8328,
                          "src": "11089:19:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "11074:35:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "11057:52:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 8411,
                  "nodeType": "ExpressionStatement",
                  "src": "11057:52:51"
                },
                {
                  "assignments": [
                    8414
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8414,
                      "mutability": "mutable",
                      "name": "depositHandler",
                      "nameLocation": "11129:14:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8441,
                      "src": "11120:23:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IHandler_$18301",
                        "typeString": "contract IHandler"
                      },
                      "typeName": {
                        "id": 8413,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8412,
                          "name": "IHandler",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 18301,
                          "src": "11120:8:51"
                        },
                        "referencedDeclaration": 18301,
                        "src": "11120:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IHandler_$18301",
                          "typeString": "contract IHandler"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8418,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8416,
                        "name": "handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8390,
                        "src": "11155:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8415,
                      "name": "IHandler",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18301,
                      "src": "11146:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                        "typeString": "type(contract IHandler)"
                      }
                    },
                    "id": 8417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11146:17:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IHandler_$18301",
                      "typeString": "contract IHandler"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11120:43:51"
                },
                {
                  "expression": {
                    "id": 8426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8419,
                      "name": "handlerResponse",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8341,
                      "src": "11173:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8422,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8330,
                          "src": "11214:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 8423,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8351,
                          "src": "11226:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 8424,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8332,
                          "src": "11234:11:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "id": 8420,
                          "name": "depositHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8414,
                          "src": "11191:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IHandler_$18301",
                            "typeString": "contract IHandler"
                          }
                        },
                        "id": 8421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18280,
                        "src": "11191:22:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes32,address,bytes memory) external returns (bytes memory)"
                        }
                      },
                      "id": 8425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11191:55:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "11173:73:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 8427,
                  "nodeType": "ExpressionStatement",
                  "src": "11173:73:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8429,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8328,
                        "src": "11270:19:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 8430,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8330,
                        "src": "11291:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 8431,
                        "name": "depositNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8339,
                        "src": "11303:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 8432,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8351,
                        "src": "11317:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8433,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8332,
                        "src": "11325:11:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 8434,
                        "name": "handlerResponse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8341,
                        "src": "11338:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 8428,
                      "name": "Deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7987,
                      "src": "11262:7:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_bytes32_$_t_uint64_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint8,bytes32,uint64,address,bytes memory,bytes memory)"
                      }
                    },
                    "id": 8435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11262:92:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8436,
                  "nodeType": "EmitStatement",
                  "src": "11257:97:51"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 8437,
                        "name": "depositNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8339,
                        "src": "11372:12:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 8438,
                        "name": "handlerResponse",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8341,
                        "src": "11386:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "id": 8439,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "11371:31:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint64_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 8342,
                  "id": 8440,
                  "nodeType": "Return",
                  "src": "11364:38:51"
                }
              ]
            },
            "documentation": {
              "id": 8326,
              "nodeType": "StructuredDocumentation",
              "src": "9342:907:51",
              "text": "@notice Initiates a transfer using a specified handler contract.\n@notice Only callable when Bridge is not paused.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID used to find address of handler to be used for deposit.\n@param depositData Additional data to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler.\n@notice Emits {Deposit} event with all necessary parameters and a handler response.\n@return depositNonce deposit nonce for the destination domain.\n@return handlerResponse a handler response:\n- ERC20Handler: responds with an empty data.\n- ERC721Handler: responds with the deposited token metadata acquired by calling a tokenURI method in the token contract.\n- GmpHandler: responds with an empty data."
            },
            "functionSelector": "73c45c98",
            "id": 8442,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8337,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8336,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19043,
                  "src": "10395:13:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "10395:13:51"
              }
            ],
            "name": "deposit",
            "nameLocation": "10263:7:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8328,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "10277:19:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10271:25:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8327,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10271:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8330,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "10306:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10298:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8329,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10298:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8332,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "10333:11:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10318:26:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8331,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10318:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8334,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "10361:7:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10346:22:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8333,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10346:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10270:99:51"
            },
            "returnParameters": {
              "id": 8342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8339,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "10433:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10426:19:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 8338,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10426:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8341,
                  "mutability": "mutable",
                  "name": "handlerResponse",
                  "nameLocation": "10460:15:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8442,
                  "src": "10447:28:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8340,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10447:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10425:51:51"
            },
            "scope": 8866,
            "src": "10254:1155:51",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8474,
              "nodeType": "Block",
              "src": "12285:158:51",
              "statements": [
                {
                  "assignments": [
                    8455
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8455,
                      "mutability": "mutable",
                      "name": "proposalArray",
                      "nameLocation": "12313:13:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8474,
                      "src": "12295:31:51",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct Bridge.Proposal[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8453,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 8452,
                            "name": "Proposal",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7947,
                            "src": "12295:8:51"
                          },
                          "referencedDeclaration": 7947,
                          "src": "12295:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                            "typeString": "struct Bridge.Proposal"
                          }
                        },
                        "id": 8454,
                        "nodeType": "ArrayTypeName",
                        "src": "12295:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                          "typeString": "struct Bridge.Proposal[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8462,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 8460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12344:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 8459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "12329:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (struct Bridge.Proposal memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8457,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 8456,
                            "name": "Proposal",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7947,
                            "src": "12333:8:51"
                          },
                          "referencedDeclaration": 7947,
                          "src": "12333:8:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                            "typeString": "struct Bridge.Proposal"
                          }
                        },
                        "id": 8458,
                        "nodeType": "ArrayTypeName",
                        "src": "12333:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                          "typeString": "struct Bridge.Proposal[]"
                        }
                      }
                    },
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12329:17:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                      "typeString": "struct Bridge.Proposal memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12295:51:51"
                },
                {
                  "expression": {
                    "id": 8467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8463,
                        "name": "proposalArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "12356:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8465,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 8464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12370:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12356:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                        "typeString": "struct Bridge.Proposal memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8466,
                      "name": "proposal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8446,
                      "src": "12375:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                        "typeString": "struct Bridge.Proposal memory"
                      }
                    },
                    "src": "12356:27:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                      "typeString": "struct Bridge.Proposal memory"
                    }
                  },
                  "id": 8468,
                  "nodeType": "ExpressionStatement",
                  "src": "12356:27:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8470,
                        "name": "proposalArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "12411:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      {
                        "id": 8471,
                        "name": "signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8448,
                        "src": "12426:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 8469,
                      "name": "executeProposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8658,
                      "src": "12394:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                        "typeString": "function (struct Bridge.Proposal memory[] memory,bytes calldata)"
                      }
                    },
                    "id": 8472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12394:42:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8473,
                  "nodeType": "ExpressionStatement",
                  "src": "12394:42:51"
                }
              ]
            },
            "documentation": {
              "id": 8443,
              "nodeType": "StructuredDocumentation",
              "src": "11415:781:51",
              "text": "@notice Executes a deposit proposal using a specified handler contract (only if signature is signed by MPC).\n@notice Failed executeProposal from handler don't revert, emits {FailedHandlerExecution} event.\n@param proposal Proposal which consists of:\n- originDomainID ID of chain deposit originated from.\n- resourceID ResourceID to be used when making deposits.\n- depositNonce ID of deposit generated by origin Bridge contract.\n- data Data originally provided when deposit was made.\n@param signature bytes memory signature composed of MPC key shares\n@notice Emits {ProposalExecution} event.\n@notice For ERC handlers, when execution fails, the handler will terminate the function with revert."
            },
            "functionSelector": "f0ead51e",
            "id": 8475,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeProposal",
            "nameLocation": "12210:15:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8446,
                  "mutability": "mutable",
                  "name": "proposal",
                  "nameLocation": "12242:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8475,
                  "src": "12226:24:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                    "typeString": "struct Bridge.Proposal"
                  },
                  "typeName": {
                    "id": 8445,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8444,
                      "name": "Proposal",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 7947,
                      "src": "12226:8:51"
                    },
                    "referencedDeclaration": 7947,
                    "src": "12226:8:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                      "typeString": "struct Bridge.Proposal"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8448,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "12267:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8475,
                  "src": "12252:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8447,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12252:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12225:52:51"
            },
            "returnParameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12285:0:51"
            },
            "scope": 8866,
            "src": "12201:242:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8657,
              "nodeType": "Block",
              "src": "13421:1304:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 8487,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "13435:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13435:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13455:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13435:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8494,
                  "nodeType": "IfStatement",
                  "src": "13431:55:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8491,
                        "name": "EmptyProposalsArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8031,
                        "src": "13465:19:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13465:21:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8493,
                    "nodeType": "RevertStatement",
                    "src": "13458:28:51"
                  }
                },
                {
                  "condition": {
                    "id": 8499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13500:29:51",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 8496,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8480,
                          "src": "13508:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          }
                        },
                        {
                          "id": 8497,
                          "name": "signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8482,
                          "src": "13519:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 8495,
                        "name": "verify",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8865,
                        "src": "13501:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$",
                          "typeString": "function (struct Bridge.Proposal memory[] memory,bytes calldata) view returns (bool)"
                        }
                      },
                      "id": 8498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13501:28:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8503,
                  "nodeType": "IfStatement",
                  "src": "13496:65:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8500,
                        "name": "InvalidProposalSigner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8029,
                        "src": "13538:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13538:23:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8502,
                    "nodeType": "RevertStatement",
                    "src": "13531:30:51"
                  }
                },
                {
                  "body": {
                    "id": 8655,
                    "nodeType": "Block",
                    "src": "13619:1100:51",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8516,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "13655:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8518,
                                "indexExpression": {
                                  "id": 8517,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "13665:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13655:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8519,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "originDomainID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7940,
                              "src": "13655:27:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8520,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "13684:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8522,
                                "indexExpression": {
                                  "id": 8521,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "13694:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13684:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "depositNonce",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7942,
                              "src": "13684:25:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 8515,
                            "name": "isProposalExecuted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8774,
                            "src": "13636:18:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint256) view returns (bool)"
                            }
                          },
                          "id": 8524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13636:74:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8527,
                        "nodeType": "IfStatement",
                        "src": "13633:120:51",
                        "trueBody": {
                          "id": 8526,
                          "nodeType": "Block",
                          "src": "13712:41:51",
                          "statements": [
                            {
                              "id": 8525,
                              "nodeType": "Continue",
                              "src": "13730:8:51"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          8529
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8529,
                            "mutability": "mutable",
                            "name": "handler",
                            "nameLocation": "13775:7:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13767:15:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "13767:7:51",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8536,
                        "initialValue": {
                          "baseExpression": {
                            "id": 8530,
                            "name": "_resourceIDToHandlerAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7955,
                            "src": "13785:27:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 8535,
                          "indexExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8531,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8480,
                                "src": "13813:9:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory[] memory"
                                }
                              },
                              "id": 8533,
                              "indexExpression": {
                                "id": 8532,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8505,
                                "src": "13823:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13813:12:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                "typeString": "struct Bridge.Proposal memory"
                              }
                            },
                            "id": 8534,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "resourceID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7944,
                            "src": "13813:23:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13785:52:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13767:70:51"
                      },
                      {
                        "assignments": [
                          8538
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8538,
                            "mutability": "mutable",
                            "name": "dataHash",
                            "nameLocation": "13859:8:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13851:16:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 8537,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "13851:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8549,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8542,
                                  "name": "handler",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8529,
                                  "src": "13897:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8543,
                                      "name": "proposals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8480,
                                      "src": "13906:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory[] memory"
                                      }
                                    },
                                    "id": 8545,
                                    "indexExpression": {
                                      "id": 8544,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8505,
                                      "src": "13916:1:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "13906:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory"
                                    }
                                  },
                                  "id": 8546,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "data",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7946,
                                  "src": "13906:17:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 8540,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "13880:3:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 8541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "13880:16:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 8547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13880:44:51",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 8539,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967288,
                            "src": "13870:9:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 8548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13870:55:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13851:74:51"
                      },
                      {
                        "assignments": [
                          8552
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8552,
                            "mutability": "mutable",
                            "name": "depositHandler",
                            "nameLocation": "13949:14:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 8655,
                            "src": "13940:23:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IHandler_$18301",
                              "typeString": "contract IHandler"
                            },
                            "typeName": {
                              "id": 8551,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8550,
                                "name": "IHandler",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 18301,
                                "src": "13940:8:51"
                              },
                              "referencedDeclaration": 18301,
                              "src": "13940:8:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IHandler_$18301",
                                "typeString": "contract IHandler"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8556,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8554,
                              "name": "handler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8529,
                              "src": "13975:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8553,
                            "name": "IHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18301,
                            "src": "13966:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IHandler_$18301_$",
                              "typeString": "type(contract IHandler)"
                            }
                          },
                          "id": 8555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13966:17:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IHandler_$18301",
                            "typeString": "contract IHandler"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13940:43:51"
                      },
                      {
                        "expression": {
                          "id": 8579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8557,
                                "name": "usedNonces",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7965,
                                "src": "13998:10:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 8568,
                              "indexExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 8558,
                                    "name": "proposals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8480,
                                    "src": "14009:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory[] memory"
                                    }
                                  },
                                  "id": 8560,
                                  "indexExpression": {
                                    "id": 8559,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8505,
                                    "src": "14019:1:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14009:12:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory"
                                  }
                                },
                                "id": 8561,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "originDomainID",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7940,
                                "src": "14009:27:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13998:39:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 8569,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 8567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 8562,
                                    "name": "proposals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8480,
                                    "src": "14038:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct Bridge.Proposal memory[] memory"
                                    }
                                  },
                                  "id": 8564,
                                  "indexExpression": {
                                    "id": 8563,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8505,
                                    "src": "14048:1:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14038:12:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory"
                                  }
                                },
                                "id": 8565,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "depositNonce",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7942,
                                "src": "14038:25:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "hexValue": "323536",
                                "id": 8566,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14066:3:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "src": "14038:31:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13998:72:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 8570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14074:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  },
                                  "id": 8576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8571,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8480,
                                        "src": "14080:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8573,
                                      "indexExpression": {
                                        "id": 8572,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8505,
                                        "src": "14090:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14080:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8574,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "depositNonce",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7942,
                                    "src": "14080:25:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 8575,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14108:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "14080:31:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                }
                              ],
                              "id": 8577,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "14079:33:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "14074:38:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13998:114:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8580,
                        "nodeType": "ExpressionStatement",
                        "src": "13998:114:51"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 8608,
                              "nodeType": "Block",
                              "src": "14245:138:51",
                              "statements": [
                                {
                                  "eventCall": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8596,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14286:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8598,
                                          "indexExpression": {
                                            "id": 8597,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14296:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14286:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8599,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "originDomainID",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7940,
                                        "src": "14286:27:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8600,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14315:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8602,
                                          "indexExpression": {
                                            "id": 8601,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14325:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14315:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8603,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "depositNonce",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7942,
                                        "src": "14315:25:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      {
                                        "id": 8604,
                                        "name": "dataHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8538,
                                        "src": "14342:8:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "id": 8605,
                                        "name": "handlerResponse",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8593,
                                        "src": "14352:15:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8595,
                                      "name": "ProposalExecution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7997,
                                      "src": "14268:17:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                        "typeString": "function (uint8,uint64,bytes32,bytes memory)"
                                      }
                                    },
                                    "id": 8606,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14268:100:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8607,
                                  "nodeType": "EmitStatement",
                                  "src": "14263:105:51"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8609,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 8594,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 8593,
                                  "mutability": "mutable",
                                  "name": "handlerResponse",
                                  "nameLocation": "14228:15:51",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8609,
                                  "src": "14215:28:51",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 8592,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14215:5:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "14214:30:51"
                            },
                            "src": "14206:177:51"
                          },
                          {
                            "block": {
                              "id": 8652,
                              "nodeType": "Block",
                              "src": "14418:291:51",
                              "statements": [
                                {
                                  "eventCall": {
                                    "arguments": [
                                      {
                                        "id": 8614,
                                        "name": "lowLevelData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8611,
                                        "src": "14464:12:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8615,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14478:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8617,
                                          "indexExpression": {
                                            "id": 8616,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14488:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14478:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8618,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "originDomainID",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7940,
                                        "src": "14478:27:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8619,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8480,
                                            "src": "14507:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8621,
                                          "indexExpression": {
                                            "id": 8620,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8505,
                                            "src": "14517:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "14507:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8622,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "depositNonce",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7942,
                                        "src": "14507:25:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      ],
                                      "id": 8613,
                                      "name": "FailedHandlerExecution",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8005,
                                      "src": "14441:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint8_$_t_uint64_$returns$__$",
                                        "typeString": "function (bytes memory,uint8,uint64)"
                                      }
                                    },
                                    "id": 8623,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14441:92:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 8624,
                                  "nodeType": "EmitStatement",
                                  "src": "14436:97:51"
                                },
                                {
                                  "expression": {
                                    "id": 8649,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 8625,
                                          "name": "usedNonces",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7965,
                                          "src": "14551:10:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                            "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                                          }
                                        },
                                        "id": 8636,
                                        "indexExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 8626,
                                              "name": "proposals",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8480,
                                              "src": "14562:9:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                "typeString": "struct Bridge.Proposal memory[] memory"
                                              }
                                            },
                                            "id": 8628,
                                            "indexExpression": {
                                              "id": 8627,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8505,
                                              "src": "14572:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14562:12:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory"
                                            }
                                          },
                                          "id": 8629,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "originDomainID",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7940,
                                          "src": "14562:27:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "14551:39:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                          "typeString": "mapping(uint256 => uint256)"
                                        }
                                      },
                                      "id": 8637,
                                      "indexExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        },
                                        "id": 8635,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 8630,
                                              "name": "proposals",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8480,
                                              "src": "14591:9:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                "typeString": "struct Bridge.Proposal memory[] memory"
                                              }
                                            },
                                            "id": 8632,
                                            "indexExpression": {
                                              "id": 8631,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8505,
                                              "src": "14601:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14591:12:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory"
                                            }
                                          },
                                          "id": 8633,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "depositNonce",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7942,
                                          "src": "14591:25:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "hexValue": "323536",
                                          "id": 8634,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "14619:3:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_256_by_1",
                                            "typeString": "int_const 256"
                                          },
                                          "value": "256"
                                        },
                                        "src": "14591:31:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "14551:72:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "&=",
                                    "rightHandSide": {
                                      "id": 8648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "14627:41:51",
                                      "subExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8646,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "31",
                                              "id": 8638,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "14629:1:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<<",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint64",
                                                    "typeString": "uint64"
                                                  },
                                                  "id": 8644,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "expression": {
                                                      "baseExpression": {
                                                        "id": 8639,
                                                        "name": "proposals",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8480,
                                                        "src": "14635:9:51",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                                        }
                                                      },
                                                      "id": 8641,
                                                      "indexExpression": {
                                                        "id": 8640,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8505,
                                                        "src": "14645:1:51",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "14635:12:51",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                                        "typeString": "struct Bridge.Proposal memory"
                                                      }
                                                    },
                                                    "id": 8642,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "depositNonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 7942,
                                                    "src": "14635:25:51",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint64",
                                                      "typeString": "uint64"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "%",
                                                  "rightExpression": {
                                                    "hexValue": "323536",
                                                    "id": 8643,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "14663:3:51",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_256_by_1",
                                                      "typeString": "int_const 256"
                                                    },
                                                    "value": "256"
                                                  },
                                                  "src": "14635:31:51",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint64",
                                                    "typeString": "uint64"
                                                  }
                                                }
                                              ],
                                              "id": 8645,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "14634:33:51",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint64",
                                                "typeString": "uint64"
                                              }
                                            },
                                            "src": "14629:38:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 8647,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "14628:40:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "14551:117:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 8650,
                                  "nodeType": "ExpressionStatement",
                                  "src": "14551:117:51"
                                },
                                {
                                  "id": 8651,
                                  "nodeType": "Continue",
                                  "src": "14686:8:51"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 8653,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 8612,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 8611,
                                  "mutability": "mutable",
                                  "name": "lowLevelData",
                                  "nameLocation": "14404:12:51",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8653,
                                  "src": "14391:25:51",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 8610,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14391:5:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "14390:27:51"
                            },
                            "src": "14384:325:51"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8583,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "14162:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8585,
                                "indexExpression": {
                                  "id": 8584,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "14172:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14162:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8586,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "resourceID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7944,
                              "src": "14162:23:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 8587,
                                  "name": "proposals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8480,
                                  "src": "14187:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Bridge.Proposal memory[] memory"
                                  }
                                },
                                "id": 8589,
                                "indexExpression": {
                                  "id": 8588,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8505,
                                  "src": "14197:1:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14187:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                  "typeString": "struct Bridge.Proposal memory"
                                }
                              },
                              "id": 8590,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7946,
                              "src": "14187:17:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 8581,
                              "name": "depositHandler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8552,
                              "src": "14131:14:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IHandler_$18301",
                                "typeString": "contract IHandler"
                              }
                            },
                            "id": 8582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "executeProposal",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18290,
                            "src": "14131:30:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes32,bytes memory) external returns (bytes memory)"
                            }
                          },
                          "id": 8591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14131:74:51",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 8654,
                        "nodeType": "TryStatement",
                        "src": "14127:582:51"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8508,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8505,
                      "src": "13592:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8509,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8480,
                        "src": "13596:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13596:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13592:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8656,
                  "initializationExpression": {
                    "assignments": [
                      8505
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8505,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13585:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 8656,
                        "src": "13577:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8504,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13577:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8507,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13589:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13577:13:51"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13614:3:51",
                      "subExpression": {
                        "id": 8512,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8505,
                        "src": "13614:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8514,
                    "nodeType": "ExpressionStatement",
                    "src": "13614:3:51"
                  },
                  "nodeType": "ForStatement",
                  "src": "13572:1147:51"
                }
              ]
            },
            "documentation": {
              "id": 8476,
              "nodeType": "StructuredDocumentation",
              "src": "12449:865:51",
              "text": "@notice Executes a batch of deposit proposals using a specified handler contract for each proposal (only if signature is signed by MPC).\n@notice If executeProposals fails it doesn't revert, emits {FailedHandlerExecution} event.\n@param proposals Array of Proposal which consists of:\n- originDomainID ID of chain deposit originated from.\n- resourceID ResourceID to be used when making deposits.\n- depositNonce ID of deposit generated by origin Bridge contract.\n- data Data originally provided when deposit was made.\n@param signature bytes memory signature for the whole array composed of MPC key shares\n@notice Emits {ProposalExecution} event for each proposal in the batch.\n@notice For ERC handlers, when execution fails, the handler will terminate the function with revert."
            },
            "functionSelector": "1f5c64c1",
            "id": 8658,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8485,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8484,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19043,
                  "src": "13407:13:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "13407:13:51"
              }
            ],
            "name": "executeProposals",
            "nameLocation": "13328:16:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8480,
                  "mutability": "mutable",
                  "name": "proposals",
                  "nameLocation": "13363:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "13345:27:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Bridge.Proposal[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8478,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 8477,
                        "name": "Proposal",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 7947,
                        "src": "13345:8:51"
                      },
                      "referencedDeclaration": 7947,
                      "src": "13345:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                        "typeString": "struct Bridge.Proposal"
                      }
                    },
                    "id": 8479,
                    "nodeType": "ArrayTypeName",
                    "src": "13345:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                      "typeString": "struct Bridge.Proposal[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "13389:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "13374:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13374:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13344:55:51"
            },
            "returnParameters": {
              "id": 8486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13421:0:51"
            },
            "scope": 8866,
            "src": "13319:1406:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8677,
              "nodeType": "Block",
              "src": "15157:105:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8664,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15171:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15194:1:51",
                          "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": 8666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15186:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8665,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15186:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15186:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15171:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8673,
                  "nodeType": "IfStatement",
                  "src": "15167:60:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8670,
                        "name": "MPCAddressAlreadySet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8035,
                        "src": "15205:20:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15205:22:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8672,
                    "nodeType": "RevertStatement",
                    "src": "15198:29:51"
                  }
                },
                {
                  "eventCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8674,
                      "name": "StartKeygen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8007,
                      "src": "15242:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15242:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8676,
                  "nodeType": "EmitStatement",
                  "src": "15237:18:51"
                }
              ]
            },
            "documentation": {
              "id": 8659,
              "nodeType": "StructuredDocumentation",
              "src": "14731:377:51",
              "text": "@notice Once MPC address is set, this method can't be invoked anymore.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract."
            },
            "functionSelector": "6ba6db6b",
            "id": 8678,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8662,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8661,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "15145:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "15145:11:51"
              }
            ],
            "name": "startKeygen",
            "nameLocation": "15122:11:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15133:2:51"
            },
            "returnParameters": {
              "id": 8663,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15157:0:51"
            },
            "scope": 8866,
            "src": "15113:149:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8718,
              "nodeType": "Block",
              "src": "15800:243:51",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8686,
                      "name": "MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8681,
                      "src": "15814:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15836:1:51",
                          "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": 8688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15828:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8687,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15828:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15828:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15814:24:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8695,
                  "nodeType": "IfStatement",
                  "src": "15810:60:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8692,
                        "name": "MPCAddressZeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8041,
                        "src": "15847:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15847:23:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8694,
                    "nodeType": "RevertStatement",
                    "src": "15840:30:51"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8696,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15884:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15907:1:51",
                          "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": 8698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15899:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15899:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15899:10:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15884:25:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8705,
                  "nodeType": "IfStatement",
                  "src": "15880:64:51",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8702,
                        "name": "MPCAddressIsNotUpdatable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8039,
                        "src": "15918:24:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15918:26:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8704,
                    "nodeType": "RevertStatement",
                    "src": "15911:33:51"
                  }
                },
                {
                  "expression": {
                    "id": 8708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8706,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "15954:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8707,
                      "name": "MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8681,
                      "src": "15968:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15954:24:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8709,
                  "nodeType": "ExpressionStatement",
                  "src": "15954:24:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8711,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            8098
                          ],
                          "referencedDeclaration": 8098,
                          "src": "15997:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 8712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15997:12:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8710,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19104,
                      "src": "15988:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15988:22:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8714,
                  "nodeType": "ExpressionStatement",
                  "src": "15988:22:51"
                },
                {
                  "eventCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8715,
                      "name": "EndKeygen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8009,
                      "src": "16025:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16025:11:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8717,
                  "nodeType": "EmitStatement",
                  "src": "16020:16:51"
                }
              ]
            },
            "documentation": {
              "id": 8679,
              "nodeType": "StructuredDocumentation",
              "src": "15268:467:51",
              "text": "@notice This method can be called only once, after the MPC address is set Bridge is unpaused.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param MPCAddress Address that will be set as MPC address."
            },
            "functionSelector": "d2e5fae9",
            "id": 8719,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8684,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8683,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "15788:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "15788:11:51"
              }
            ],
            "name": "endKeygen",
            "nameLocation": "15749:9:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8681,
                  "mutability": "mutable",
                  "name": "MPCAddress",
                  "nameLocation": "15767:10:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8719,
                  "src": "15759:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15759:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15758:20:51"
            },
            "returnParameters": {
              "id": 8685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15800:0:51"
            },
            "scope": 8866,
            "src": "15740:303:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8731,
              "nodeType": "Block",
              "src": "16570:38:51",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8728,
                        "name": "hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8722,
                        "src": "16596:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8727,
                      "name": "KeyRefresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8013,
                      "src": "16585:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 8729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16585:16:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8730,
                  "nodeType": "EmitStatement",
                  "src": "16580:21:51"
                }
              ]
            },
            "documentation": {
              "id": 8720,
              "nodeType": "StructuredDocumentation",
              "src": "16049:455:51",
              "text": "@notice It's used to trigger the belonging process on the MPC side.\nIt's used to trigger the belonging process on the MPC side which also handles keygen function calls order.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param hash Topology hash which prevents changes during refresh process."
            },
            "functionSelector": "d8236744",
            "id": 8732,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8725,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8724,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "16558:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "16558:11:51"
              }
            ],
            "name": "refreshKey",
            "nameLocation": "16518:10:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8722,
                  "mutability": "mutable",
                  "name": "hash",
                  "nameLocation": "16543:4:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8732,
                  "src": "16529:18:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8721,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "16529:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16528:20:51"
            },
            "returnParameters": {
              "id": 8726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16570:0:51"
            },
            "scope": 8866,
            "src": "16509:99:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8744,
              "nodeType": "Block",
              "src": "17050:35:51",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8741,
                        "name": "txHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8735,
                        "src": "17071:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 8740,
                      "name": "Retry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8017,
                      "src": "17065:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 8742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17065:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8743,
                  "nodeType": "EmitStatement",
                  "src": "17060:18:51"
                }
              ]
            },
            "documentation": {
              "id": 8733,
              "nodeType": "StructuredDocumentation",
              "src": "16614:373:51",
              "text": "@notice This method is used to trigger the process for retrying failed deposits on the MPC side.\n@notice Only callable by address that has the right to call the specific function,\nwhich is mapped in {functionAccess} in AccessControlSegregator contract.\n@param txHash Transaction hash which contains deposit that should be retried"
            },
            "functionSelector": "366b4885",
            "id": 8745,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8738,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8737,
                  "name": "onlyAllowed",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8052,
                  "src": "17038:11:51"
                },
                "nodeType": "ModifierInvocation",
                "src": "17038:11:51"
              }
            ],
            "name": "retry",
            "nameLocation": "17001:5:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8735,
                  "mutability": "mutable",
                  "name": "txHash",
                  "nameLocation": "17021:6:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8745,
                  "src": "17007:20:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8734,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "17007:6:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17006:22:51"
            },
            "returnParameters": {
              "id": 8739,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17050:0:51"
            },
            "scope": 8866,
            "src": "16992:93:51",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8773,
              "nodeType": "Block",
              "src": "17468:99:51",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 8755,
                            "name": "usedNonces",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7965,
                            "src": "17485:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                              "typeString": "mapping(uint8 => mapping(uint256 => uint256))"
                            }
                          },
                          "id": 8757,
                          "indexExpression": {
                            "id": 8756,
                            "name": "domainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8748,
                            "src": "17496:8:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17485:20:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8761,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8758,
                            "name": "depositNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8750,
                            "src": "17506:12:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "hexValue": "323536",
                            "id": 8759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17521:3:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_256_by_1",
                              "typeString": "int_const 256"
                            },
                            "value": "256"
                          },
                          "src": "17506:18:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17485:40:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 8762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17529:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 8763,
                                    "name": "depositNonce",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8750,
                                    "src": "17535:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 8764,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "17550:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "17535:18:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8766,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "17534:20:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "17529:25:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8768,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "17528:27:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17485:70:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8770,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17559:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17485:75:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8754,
                  "id": 8772,
                  "nodeType": "Return",
                  "src": "17478:82:51"
                }
              ]
            },
            "documentation": {
              "id": 8746,
              "nodeType": "StructuredDocumentation",
              "src": "17091:279:51",
              "text": "@notice Returns a boolean value.\n@param domainID ID of chain deposit originated from.\n@param depositNonce ID of deposit generated by origin Bridge contract.\n@return Boolean value depending if deposit nonce has already been used or not."
            },
            "functionSelector": "9ae0bf45",
            "id": 8774,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isProposalExecuted",
            "nameLocation": "17384:18:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8751,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8748,
                  "mutability": "mutable",
                  "name": "domainID",
                  "nameLocation": "17409:8:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17403:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8747,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "17403:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8750,
                  "mutability": "mutable",
                  "name": "depositNonce",
                  "nameLocation": "17427:12:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17419:20:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8749,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17419:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17402:38:51"
            },
            "returnParameters": {
              "id": 8754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8753,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8774,
                  "src": "17462:4:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8752,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17462:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17461:6:51"
            },
            "scope": 8866,
            "src": "17375:192:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8864,
              "nodeType": "Block",
              "src": "17955:694:51",
              "statements": [
                {
                  "assignments": [
                    8790
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8790,
                      "mutability": "mutable",
                      "name": "keccakData",
                      "nameLocation": "17982:10:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8864,
                      "src": "17965:27:51",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8788,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17965:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8789,
                        "nodeType": "ArrayTypeName",
                        "src": "17965:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8797,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8794,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8779,
                          "src": "18009:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct Bridge.Proposal memory[] memory"
                          }
                        },
                        "id": 8795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "18009:16:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "17995:13:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 8791,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17999:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8792,
                        "nodeType": "ArrayTypeName",
                        "src": "17999:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 8796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17995:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17965:61:51"
                },
                {
                  "body": {
                    "id": 8838,
                    "nodeType": "Block",
                    "src": "18083:341:51",
                    "statements": [
                      {
                        "expression": {
                          "id": 8836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8809,
                              "name": "keccakData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8790,
                              "src": "18097:10:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 8811,
                            "indexExpression": {
                              "id": 8810,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8799,
                              "src": "18108:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "18097:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8815,
                                    "name": "_PROPOSAL_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7928,
                                    "src": "18172:18:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8816,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18212:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8818,
                                      "indexExpression": {
                                        "id": 8817,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18222:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18212:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8819,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "originDomainID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7940,
                                    "src": "18212:27:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8820,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18261:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8822,
                                      "indexExpression": {
                                        "id": 8821,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18271:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18261:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8823,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "depositNonce",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7942,
                                    "src": "18261:25:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 8824,
                                        "name": "proposals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8779,
                                        "src": "18308:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct Bridge.Proposal memory[] memory"
                                        }
                                      },
                                      "id": 8826,
                                      "indexExpression": {
                                        "id": 8825,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8799,
                                        "src": "18318:1:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "18308:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                        "typeString": "struct Bridge.Proposal memory"
                                      }
                                    },
                                    "id": 8827,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "resourceID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7944,
                                    "src": "18308:23:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 8829,
                                            "name": "proposals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8779,
                                            "src": "18363:9:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct Bridge.Proposal memory[] memory"
                                            }
                                          },
                                          "id": 8831,
                                          "indexExpression": {
                                            "id": 8830,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8799,
                                            "src": "18373:1:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "18363:12:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Proposal_$7947_memory_ptr",
                                            "typeString": "struct Bridge.Proposal memory"
                                          }
                                        },
                                        "id": 8832,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 7946,
                                        "src": "18363:17:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8828,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967288,
                                      "src": "18353:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 8833,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18353:28:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8813,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "18140:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 8814,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "18140:10:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 8834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18140:259:51",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 8812,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "18113:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 8835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18113:300:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "18097:316:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 8837,
                        "nodeType": "ExpressionStatement",
                        "src": "18097:316:51"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8802,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8799,
                      "src": "18056:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8803,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8779,
                        "src": "18060:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Bridge.Proposal memory[] memory"
                        }
                      },
                      "id": 8804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "18060:16:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18056:20:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8839,
                  "initializationExpression": {
                    "assignments": [
                      8799
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8799,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "18049:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 8839,
                        "src": "18041:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18041:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8801,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18053:1:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "18041:13:51"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "18078:3:51",
                      "subExpression": {
                        "id": 8806,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8799,
                        "src": "18078:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8808,
                    "nodeType": "ExpressionStatement",
                    "src": "18078:3:51"
                  },
                  "nodeType": "ForStatement",
                  "src": "18036:388:51"
                },
                {
                  "assignments": [
                    8841
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8841,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "18442:6:51",
                      "nodeType": "VariableDeclaration",
                      "scope": 8864,
                      "src": "18434:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8840,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18434:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8859,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8857,
                        "name": "signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "18594:9:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8846,
                                    "name": "_PROPOSALS_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7923,
                                    "src": "18513:19:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 8850,
                                            "name": "keccakData",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8790,
                                            "src": "18561:10:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                              "typeString": "bytes32[] memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                              "typeString": "bytes32[] memory"
                                            }
                                          ],
                                          "expression": {
                                            "id": 8848,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967295,
                                            "src": "18544:3:51",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 8849,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "src": "18544:16:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 8851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18544:28:51",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 8847,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967288,
                                      "src": "18534:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 8852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18534:39:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8844,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "18489:3:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 8845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "18489:10:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 8853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18489:85:51",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 8843,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "18479:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 8854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18479:96:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 8842,
                          "name": "_hashTypedDataV4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6142,
                          "src": "18451:16:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32) view returns (bytes32)"
                          }
                        },
                        "id": 8855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18451:134:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 8856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5738,
                      "src": "18451:142:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 8858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18451:153:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18434:170:51"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8860,
                      "name": "signer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8841,
                      "src": "18621:6:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 8861,
                      "name": "_MPCAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7932,
                      "src": "18631:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18621:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8863,
                  "nodeType": "Return",
                  "src": "18614:28:51"
                }
              ]
            },
            "documentation": {
              "id": 8775,
              "nodeType": "StructuredDocumentation",
              "src": "17573:279:51",
              "text": "@notice Verifies that proposal data is signed by MPC address.\n@param proposals array of Proposals.\n@param signature signature bytes memory signature composed of MPC key shares.\n@return Boolean value depending if signer is vaild or not."
            },
            "functionSelector": "a546e8a1",
            "id": 8865,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nameLocation": "17866:6:51",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8779,
                  "mutability": "mutable",
                  "name": "proposals",
                  "nameLocation": "17891:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17873:27:51",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Bridge.Proposal[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8777,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 8776,
                        "name": "Proposal",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 7947,
                        "src": "17873:8:51"
                      },
                      "referencedDeclaration": 7947,
                      "src": "17873:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$7947_storage_ptr",
                        "typeString": "struct Bridge.Proposal"
                      }
                    },
                    "id": 8778,
                    "nodeType": "ArrayTypeName",
                    "src": "17873:10:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Proposal_$7947_storage_$dyn_storage_ptr",
                      "typeString": "struct Bridge.Proposal[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8781,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "17917:9:51",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17902:24:51",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8780,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "17902:5:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17872:55:51"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "17949:4:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17949:4:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17948:6:51"
            },
            "scope": 8866,
            "src": "17857:792:51",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8867,
        "src": "621:18030:51",
        "usedErrors": [
          8023,
          8025,
          8027,
          8029,
          8031,
          8033,
          8035,
          8037,
          8039,
          8041
        ]
      }
    ],
    "src": "81:18571:51"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {
        "0x497acaa34ac19c2a2a579ad43eca493b4fea820459e254e9383e7dda216b0f04": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "newAccessControl",
              "type": "address"
            }
          ],
          "name": "AccessControlChanged",
          "type": "event"
        },
        "0x17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "destinationDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "resourceID",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "handlerResponse",
              "type": "bytes"
            }
          ],
          "name": "Deposit",
          "type": "event"
        },
        "0x4187686ceef7b541a1f224d48d4cded8f2c535e0e58ac0f0514071b1de3dad57": {
          "anonymous": false,
          "inputs": [],
          "name": "EndKeygen",
          "type": "event"
        },
        "0x19f774a63ee465292252a9981ae52051acc13da671c698ac4b5bf25b38c5b6fc": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "lowLevelData",
              "type": "bytes"
            },
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            }
          ],
          "name": "FailedHandlerExecution",
          "type": "event"
        },
        "0x729170bd142e4965055b26a285faeedf03baf2b915bfc5a7c75d24b45815ff2c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "newFeeHandler",
              "type": "address"
            }
          ],
          "name": "FeeHandlerChanged",
          "type": "event"
        },
        "0xe78d813a9260522f81d6c761e311727b2e19008daadd2b9e174be86bc4f06a4b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "hash",
              "type": "string"
            }
          ],
          "name": "KeyRefresh",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0xb83128682faafdf78efbb57c4c9acdc12ba648a50eca00b8b72818ea2d8e5cf9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "dataHash",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "handlerResponse",
              "type": "bytes"
            }
          ],
          "name": "ProposalExecution",
          "type": "event"
        },
        "0x9069464c059b9a90135a3fdf2c47855263346b912894ad7562d989532c3fad4c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "txHash",
              "type": "string"
            }
          ],
          "name": "Retry",
          "type": "event"
        },
        "0x24e723a5c27b62883404028b8dee9965934de6a46828cda2ff63bf9a5e65ce43": {
          "anonymous": false,
          "inputs": [],
          "name": "StartKeygen",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x6CdE2Cd82a4F8B74693Ff5e194c19CA08c2d1c68",
      "transactionHash": "0x3f215c8e1912e2637e94e954e243fa83a198cab93555ae28499e7326f2c51602"
    },
    "1727170313921": {
      "events": {
        "0x497acaa34ac19c2a2a579ad43eca493b4fea820459e254e9383e7dda216b0f04": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "newAccessControl",
              "type": "address"
            }
          ],
          "name": "AccessControlChanged",
          "type": "event"
        },
        "0x17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "destinationDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "resourceID",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "handlerResponse",
              "type": "bytes"
            }
          ],
          "name": "Deposit",
          "type": "event"
        },
        "0x4187686ceef7b541a1f224d48d4cded8f2c535e0e58ac0f0514071b1de3dad57": {
          "anonymous": false,
          "inputs": [],
          "name": "EndKeygen",
          "type": "event"
        },
        "0x19f774a63ee465292252a9981ae52051acc13da671c698ac4b5bf25b38c5b6fc": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "lowLevelData",
              "type": "bytes"
            },
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            }
          ],
          "name": "FailedHandlerExecution",
          "type": "event"
        },
        "0x729170bd142e4965055b26a285faeedf03baf2b915bfc5a7c75d24b45815ff2c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "newFeeHandler",
              "type": "address"
            }
          ],
          "name": "FeeHandlerChanged",
          "type": "event"
        },
        "0xe78d813a9260522f81d6c761e311727b2e19008daadd2b9e174be86bc4f06a4b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "hash",
              "type": "string"
            }
          ],
          "name": "KeyRefresh",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0xb83128682faafdf78efbb57c4c9acdc12ba648a50eca00b8b72818ea2d8e5cf9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "originDomainID",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint64",
              "name": "depositNonce",
              "type": "uint64"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "dataHash",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "bytes",
              "name": "handlerResponse",
              "type": "bytes"
            }
          ],
          "name": "ProposalExecution",
          "type": "event"
        },
        "0x9069464c059b9a90135a3fdf2c47855263346b912894ad7562d989532c3fad4c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "string",
              "name": "txHash",
              "type": "string"
            }
          ],
          "name": "Retry",
          "type": "event"
        },
        "0x24e723a5c27b62883404028b8dee9965934de6a46828cda2ff63bf9a5e65ce43": {
          "anonymous": false,
          "inputs": [],
          "name": "StartKeygen",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x6CdE2Cd82a4F8B74693Ff5e194c19CA08c2d1c68",
      "transactionHash": "0xee6f4c9038a1f186470e67ff83105aeee3059dce94011c92d2707c3d4037f1bb"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:13.397Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "adminChangeAccessControl(address)": {
        "params": {
          "newAccessControl": "Address {_accessControl} will be updated to."
        }
      },
      "adminChangeFeeHandler(address)": {
        "params": {
          "newFeeHandler": "Address {_feeHandler} will be updated to."
        }
      },
      "adminSetBurnable(address,address)": {
        "params": {
          "handlerAddress": "Address of handler resource will be set for.",
          "tokenAddress": "Address of contract to be called when a deposit is made and a deposited is executed."
        }
      },
      "adminSetDepositNonce(uint8,uint64)": {
        "params": {
          "domainID": "Domain ID for increasing nonce.",
          "nonce": "The nonce value to be set."
        }
      },
      "adminSetForwarder(address,bool)": {
        "params": {
          "forwarder": "Forwarder address to be added.",
          "valid": "Decision for the specific forwarder."
        }
      },
      "adminSetResource(address,bytes32,address,bytes)": {
        "params": {
          "args": "Additional data to be passed to specified handler.",
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "handlerAddress": "Address of handler resource will be set for.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "adminWithdraw(address,bytes)": {
        "params": {
          "data": "ABI-encoded withdrawal params relevant to the specified handler.",
          "handlerAddress": "Address of handler to withdraw from."
        }
      },
      "constructor": {
        "params": {
          "accessControl": "Address of access control contract.",
          "domainID": "ID of chain the Bridge contract exists on."
        }
      },
      "deposit(uint8,bytes32,bytes,bytes)": {
        "params": {
          "depositData": "Additional data to be passed to specified handler.",
          "destinationDomainID": "ID of chain deposit will be bridged to.",
          "feeData": "Additional data to be passed to the fee handler.",
          "resourceID": "ResourceID used to find address of handler to be used for deposit."
        },
        "returns": {
          "depositNonce": "deposit nonce for the destination domain.",
          "handlerResponse": "a handler response: - ERC20Handler: responds with an empty data. - ERC721Handler: responds with the deposited token metadata acquired by calling a tokenURI method in the token contract. - GmpHandler: responds with an empty data."
        }
      },
      "endKeygen(address)": {
        "params": {
          "MPCAddress": "Address that will be set as MPC address."
        }
      },
      "executeProposal((uint8,uint64,bytes32,bytes),bytes)": {
        "params": {
          "proposal": "Proposal which consists of: - originDomainID ID of chain deposit originated from. - resourceID ResourceID to be used when making deposits. - depositNonce ID of deposit generated by origin Bridge contract. - data Data originally provided when deposit was made.",
          "signature": "bytes memory signature composed of MPC key shares"
        }
      },
      "executeProposals((uint8,uint64,bytes32,bytes)[],bytes)": {
        "params": {
          "proposals": "Array of Proposal which consists of: - originDomainID ID of chain deposit originated from. - resourceID ResourceID to be used when making deposits. - depositNonce ID of deposit generated by origin Bridge contract. - data Data originally provided when deposit was made.",
          "signature": "bytes memory signature for the whole array composed of MPC key shares"
        }
      },
      "isProposalExecuted(uint8,uint256)": {
        "params": {
          "depositNonce": "ID of deposit generated by origin Bridge contract.",
          "domainID": "ID of chain deposit originated from."
        },
        "returns": {
          "_0": "Boolean value depending if deposit nonce has already been used or not."
        }
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "refreshKey(string)": {
        "params": {
          "hash": "Topology hash which prevents changes during refresh process."
        }
      },
      "retry(string)": {
        "params": {
          "txHash": "Transaction hash which contains deposit that should be retried"
        }
      },
      "verify((uint8,uint64,bytes32,bytes)[],bytes)": {
        "params": {
          "proposals": "array of Proposals.",
          "signature": "signature bytes memory signature composed of MPC key shares."
        },
        "returns": {
          "_0": "Boolean value depending if signer is vaild or not."
        }
      }
    },
    "title": "Facilitates deposits and creation of deposit proposals, and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adminChangeAccessControl(address)": {
        "notice": "Changes access control contract address.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminChangeFeeHandler(address)": {
        "notice": "Changes deposit fee handler contract address.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminPauseTransfers()": {
        "notice": "Pauses deposits, proposal creation and voting, and deposit executions.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminSetBurnable(address,address)": {
        "notice": "Sets a resource as burnable for handler contracts that use the IERCHandler interface.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminSetDepositNonce(uint8,uint64)": {
        "notice": "Sets the nonce for the specific domainID.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminSetForwarder(address,bool)": {
        "notice": "Set a forwarder to be used.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminSetResource(address,bytes32,address,bytes)": {
        "notice": "Sets a new resource for handler contracts that use the IERCHandler interface, and maps the {handlerAddress} to {resourceID} in {_resourceIDToHandlerAddress}.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "adminUnpauseTransfers()": {
        "notice": "Unpauses deposits, proposal creation and voting, and deposit executions.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract.MPC address has to be set before Bridge can be unpaused"
      },
      "adminWithdraw(address,bytes)": {
        "notice": "Used to manually withdraw funds from ERC safes.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "constructor": {
        "notice": "Initializes Bridge, creates and grants {_msgSender()} the admin role, sets access control contract for bridge and sets the inital state of the Bridge to paused."
      },
      "deposit(uint8,bytes32,bytes,bytes)": {
        "notice": "Initiates a transfer using a specified handler contract.Only callable when Bridge is not paused.Emits {Deposit} event with all necessary parameters and a handler response."
      },
      "endKeygen(address)": {
        "notice": "This method can be called only once, after the MPC address is set Bridge is unpaused. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "executeProposal((uint8,uint64,bytes32,bytes),bytes)": {
        "notice": "Executes a deposit proposal using a specified handler contract (only if signature is signed by MPC).Failed executeProposal from handler don't revert, emits {FailedHandlerExecution} event.Emits {ProposalExecution} event.For ERC handlers, when execution fails, the handler will terminate the function with revert."
      },
      "executeProposals((uint8,uint64,bytes32,bytes)[],bytes)": {
        "notice": "Executes a batch of deposit proposals using a specified handler contract for each proposal (only if signature is signed by MPC).If executeProposals fails it doesn't revert, emits {FailedHandlerExecution} event.Emits {ProposalExecution} event for each proposal in the batch.For ERC handlers, when execution fails, the handler will terminate the function with revert."
      },
      "isProposalExecuted(uint8,uint256)": {
        "notice": "Returns a boolean value."
      },
      "refreshKey(string)": {
        "notice": "It's used to trigger the belonging process on the MPC side. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "retry(string)": {
        "notice": "This method is used to trigger the process for retrying failed deposits on the MPC side.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "startKeygen()": {
        "notice": "Once MPC address is set, this method can't be invoked anymore. It's used to trigger the belonging process on the MPC side which also handles keygen function calls order.Only callable by address that has the right to call the specific function, which is mapped in {functionAccess} in AccessControlSegregator contract."
      },
      "verify((uint8,uint64,bytes32,bytes)[],bytes)": {
        "notice": "Verifies that proposal data is signed by MPC address."
      }
    },
    "version": 1
  }
}