{
  "contractName": "EnshroudToken",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_initialMinter",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotMinter",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PermitExpired",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "status",
          "type": "bool"
        }
      ],
      "name": "MinterStatusUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ENSHROUDTOKEN_DECIMALS",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "ENSHROUDTOKEN_NAME",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "ENSHROUDTOKEN_SYMBOL",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "ENSHROUDTOKEN_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_minterAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_minterStatus",
          "type": "bool"
        }
      ],
      "name": "updateMinterStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "getMinterStatus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialMinter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotMinter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PermitExpired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENSHROUDTOKEN_DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENSHROUDTOKEN_NAME\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENSHROUDTOKEN_SYMBOL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENSHROUDTOKEN_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getMinterStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minterAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_minterStatus\",\"type\":\"bool\"}],\"name\":\"updateMinterStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"mintable by isMinter role mapping; not burnable; ERC20Permit implemented\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_initialMinter\":\": address initially designated as a minter, presumably deployer and/or DAO governance\"}},\"getMinterStatus(address)\":{\"params\":{\"_addr\":\"queried minter address\"}},\"mint(address,uint256)\":{\"params\":{\"_addr\":\"address that will receive the minted $ENSHROUD tokens\",\"_amount\":\"amount of $ENSHROUD tokens that will be minted\"}},\"updateMinterStatus(address,bool)\":{\"params\":{\"_minterAddress\":\"address whose minter authorization status will be updated\",\"_minterStatus\":\": updated minter authorization status\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NotMinter()\":[{\"notice\":\"----------------------------------------------------------------------- Errors -----------------------------------------------------------------------\"}],\"PermitExpired()\":[{\"notice\":\"----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------\"}]},\"events\":{\"MinterStatusUpdated(address,bool)\":{\"notice\":\"----------------------------------------------------------------------- Events -----------------------------------------------------------------------\"},\"Transfer(address,address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- Events -----------------------------------------------------------------------\"}},\"kind\":\"user\",\"methods\":{\"ENSHROUDTOKEN_NAME()\":{\"notice\":\"----------------------------------------------------------------------- ERC20 data -----------------------------------------------------------------------\"},\"approve(address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC20 Logic -----------------------------------------------------------------------\"},\"constructor\":{\"notice\":\"include initial mint and isMinter status here\"},\"domainSeparator()\":{\"notice\":\"----------------------------------------------------------------------- EIP-712 Logic -----------------------------------------------------------------------\"},\"getMinterStatus(address)\":{\"notice\":\"returns if an address is authorized to mint tokens\"},\"mint(address,uint256)\":{\"notice\":\"mints '_amount' of Enshroud Token to '_addr'\"},\"name()\":{\"notice\":\"----------------------------------------------------------------------- Metadata Storage -----------------------------------------------------------------------\"},\"nonces(address)\":{\"notice\":\"----------------------------------------------------------------------- EIP-2612 Storage -----------------------------------------------------------------------\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"----------------------------------------------------------------------- EIP-2612 Logic -----------------------------------------------------------------------\"},\"totalSupply()\":{\"notice\":\"----------------------------------------------------------------------- ERC20 Storage -----------------------------------------------------------------------\"},\"updateMinterStatus(address,bool)\":{\"notice\":\"updates if an address is authorized to mint tokens, by an existing minter\"}},\"notice\":\"Enshroud ERC20 token contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/EnshroudToken.sol\":\"EnshroudToken\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/EnshroudToken.sol\":{\"keccak256\":\"0x6fa1a0af0ad744b463bdcd7c67784e5763e8be7fd00f5b378d3cccad3640ddbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef6ca4321491ff143257b64f3223ce7beaf7b881ecbf7a701566e6b9f9b762af\",\"dweb:/ipfs/QmRcAn8zFCgP3c9KKnV8B8YZWReguvhwDRpT5J2Gnhs4ij\"]}},\"version\":1}",
  "bytecode": "[encoded data, 7866 characters]",
  "deployedBytecode": "[encoded data, 6324 characters]",
  "immutableReferences": {
    "26": [
      {
        "length": 32,
        "start": 489
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nativeSrc": "0:3441:2",
        "nodeType": "YulBlock",
        "src": "0:3441:2",
        "statements": [
          {
            "nativeSrc": "6:3:2",
            "nodeType": "YulBlock",
            "src": "6:3:2",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "95:209:2",
              "nodeType": "YulBlock",
              "src": "95:209:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "141:16:2",
                    "nodeType": "YulBlock",
                    "src": "141:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "150:1:2",
                              "nodeType": "YulLiteral",
                              "src": "150:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "153:1:2",
                              "nodeType": "YulLiteral",
                              "src": "153:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "143:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "143:6:2"
                          },
                          "nativeSrc": "143:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "143:12:2"
                        },
                        "nativeSrc": "143:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "143:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "116:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "116:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "125:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "125:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "112:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "112:3:2"
                        },
                        "nativeSrc": "112:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "112:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "137:2:2",
                        "nodeType": "YulLiteral",
                        "src": "137:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "108:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "108:3:2"
                    },
                    "nativeSrc": "108:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "108:32:2"
                  },
                  "nativeSrc": "105:52:2",
                  "nodeType": "YulIf",
                  "src": "105:52:2"
                },
                {
                  "nativeSrc": "166:29:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "166:29:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "185:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "185:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "179:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "179:5:2"
                    },
                    "nativeSrc": "179:16:2",
                    "nodeType": "YulFunctionCall",
                    "src": "179:16:2"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "170:5:2",
                      "nodeType": "YulTypedName",
                      "src": "170:5:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "258:16:2",
                    "nodeType": "YulBlock",
                    "src": "258:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "267:1:2",
                              "nodeType": "YulLiteral",
                              "src": "267:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "270:1:2",
                              "nodeType": "YulLiteral",
                              "src": "270:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "260:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "260:6:2"
                          },
                          "nativeSrc": "260:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "260:12:2"
                        },
                        "nativeSrc": "260:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "260:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "217:5:2",
                            "nodeType": "YulIdentifier",
                            "src": "217:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "228:5:2",
                                "nodeType": "YulIdentifier",
                                "src": "228:5:2"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "243:3:2",
                                        "nodeType": "YulLiteral",
                                        "src": "243:3:2",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "248:1:2",
                                        "nodeType": "YulLiteral",
                                        "src": "248:1:2",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "239:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "239:3:2"
                                    },
                                    "nativeSrc": "239:11:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "239:11:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "252:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "252:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "235:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "235:3:2"
                                },
                                "nativeSrc": "235:19:2",
                                "nodeType": "YulFunctionCall",
                                "src": "235:19:2"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "224:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "224:3:2"
                            },
                            "nativeSrc": "224:31:2",
                            "nodeType": "YulFunctionCall",
                            "src": "224:31:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "214:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "214:2:2"
                        },
                        "nativeSrc": "214:42:2",
                        "nodeType": "YulFunctionCall",
                        "src": "214:42:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "207:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "207:6:2"
                    },
                    "nativeSrc": "207:50:2",
                    "nodeType": "YulFunctionCall",
                    "src": "207:50:2"
                  },
                  "nativeSrc": "204:70:2",
                  "nodeType": "YulIf",
                  "src": "204:70:2"
                },
                {
                  "nativeSrc": "283:15:2",
                  "nodeType": "YulAssignment",
                  "src": "283:15:2",
                  "value": {
                    "name": "value",
                    "nativeSrc": "293:5:2",
                    "nodeType": "YulIdentifier",
                    "src": "293:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "283:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "283:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nativeSrc": "14:290:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "61:9:2",
                "nodeType": "YulTypedName",
                "src": "61:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "72:7:2",
                "nodeType": "YulTypedName",
                "src": "72:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "84:6:2",
                "nodeType": "YulTypedName",
                "src": "84:6:2",
                "type": ""
              }
            ],
            "src": "14:290:2"
          },
          {
            "body": {
              "nativeSrc": "341:95:2",
              "nodeType": "YulBlock",
              "src": "341:95:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "358:1:2",
                        "nodeType": "YulLiteral",
                        "src": "358:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "365:3:2",
                            "nodeType": "YulLiteral",
                            "src": "365:3:2",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "370:10:2",
                            "nodeType": "YulLiteral",
                            "src": "370:10:2",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "361:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "361:3:2"
                        },
                        "nativeSrc": "361:20:2",
                        "nodeType": "YulFunctionCall",
                        "src": "361:20:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "351:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "351:6:2"
                    },
                    "nativeSrc": "351:31:2",
                    "nodeType": "YulFunctionCall",
                    "src": "351:31:2"
                  },
                  "nativeSrc": "351:31:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "351:31:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "398:1:2",
                        "nodeType": "YulLiteral",
                        "src": "398:1:2",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "401:4:2",
                        "nodeType": "YulLiteral",
                        "src": "401:4:2",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "391:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "391:6:2"
                    },
                    "nativeSrc": "391:15:2",
                    "nodeType": "YulFunctionCall",
                    "src": "391:15:2"
                  },
                  "nativeSrc": "391:15:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "391:15:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "422:1:2",
                        "nodeType": "YulLiteral",
                        "src": "422:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "425:4:2",
                        "nodeType": "YulLiteral",
                        "src": "425:4:2",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "415:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "415:6:2"
                    },
                    "nativeSrc": "415:15:2",
                    "nodeType": "YulFunctionCall",
                    "src": "415:15:2"
                  },
                  "nativeSrc": "415:15:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "415:15:2"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "309:127:2",
            "nodeType": "YulFunctionDefinition",
            "src": "309:127:2"
          },
          {
            "body": {
              "nativeSrc": "496:325:2",
              "nodeType": "YulBlock",
              "src": "496:325:2",
              "statements": [
                {
                  "nativeSrc": "506:22:2",
                  "nodeType": "YulAssignment",
                  "src": "506:22:2",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "520:1:2",
                        "nodeType": "YulLiteral",
                        "src": "520:1:2",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nativeSrc": "523:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "523:4:2"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nativeSrc": "516:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "516:3:2"
                    },
                    "nativeSrc": "516:12:2",
                    "nodeType": "YulFunctionCall",
                    "src": "516:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nativeSrc": "506:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "506:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "537:38:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "537:38:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nativeSrc": "567:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "567:4:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "573:1:2",
                        "nodeType": "YulLiteral",
                        "src": "573:1:2",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nativeSrc": "563:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "563:3:2"
                    },
                    "nativeSrc": "563:12:2",
                    "nodeType": "YulFunctionCall",
                    "src": "563:12:2"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nativeSrc": "541:18:2",
                      "nodeType": "YulTypedName",
                      "src": "541:18:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "614:31:2",
                    "nodeType": "YulBlock",
                    "src": "614:31:2",
                    "statements": [
                      {
                        "nativeSrc": "616:27:2",
                        "nodeType": "YulAssignment",
                        "src": "616:27:2",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nativeSrc": "630:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "630:6:2"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "638:4:2",
                              "nodeType": "YulLiteral",
                              "src": "638:4:2",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nativeSrc": "626:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "626:3:2"
                          },
                          "nativeSrc": "626:17:2",
                          "nodeType": "YulFunctionCall",
                          "src": "626:17:2"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nativeSrc": "616:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "616:6:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nativeSrc": "594:18:2",
                        "nodeType": "YulIdentifier",
                        "src": "594:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "587:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "587:6:2"
                    },
                    "nativeSrc": "587:26:2",
                    "nodeType": "YulFunctionCall",
                    "src": "587:26:2"
                  },
                  "nativeSrc": "584:61:2",
                  "nodeType": "YulIf",
                  "src": "584:61:2"
                },
                {
                  "body": {
                    "nativeSrc": "704:111:2",
                    "nodeType": "YulBlock",
                    "src": "704:111:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "725:1:2",
                              "nodeType": "YulLiteral",
                              "src": "725:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "732:3:2",
                                  "nodeType": "YulLiteral",
                                  "src": "732:3:2",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "737:10:2",
                                  "nodeType": "YulLiteral",
                                  "src": "737:10:2",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nativeSrc": "728:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "728:3:2"
                              },
                              "nativeSrc": "728:20:2",
                              "nodeType": "YulFunctionCall",
                              "src": "728:20:2"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "718:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "718:6:2"
                          },
                          "nativeSrc": "718:31:2",
                          "nodeType": "YulFunctionCall",
                          "src": "718:31:2"
                        },
                        "nativeSrc": "718:31:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "718:31:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "769:1:2",
                              "nodeType": "YulLiteral",
                              "src": "769:1:2",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "772:4:2",
                              "nodeType": "YulLiteral",
                              "src": "772:4:2",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "762:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "762:6:2"
                          },
                          "nativeSrc": "762:15:2",
                          "nodeType": "YulFunctionCall",
                          "src": "762:15:2"
                        },
                        "nativeSrc": "762:15:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "762:15:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "797:1:2",
                              "nodeType": "YulLiteral",
                              "src": "797:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "800:4:2",
                              "nodeType": "YulLiteral",
                              "src": "800:4:2",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "790:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "790:6:2"
                          },
                          "nativeSrc": "790:15:2",
                          "nodeType": "YulFunctionCall",
                          "src": "790:15:2"
                        },
                        "nativeSrc": "790:15:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "790:15:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nativeSrc": "660:18:2",
                        "nodeType": "YulIdentifier",
                        "src": "660:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nativeSrc": "683:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "683:6:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "691:2:2",
                            "nodeType": "YulLiteral",
                            "src": "691:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "680:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "680:2:2"
                        },
                        "nativeSrc": "680:14:2",
                        "nodeType": "YulFunctionCall",
                        "src": "680:14:2"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nativeSrc": "657:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "657:2:2"
                    },
                    "nativeSrc": "657:38:2",
                    "nodeType": "YulFunctionCall",
                    "src": "657:38:2"
                  },
                  "nativeSrc": "654:161:2",
                  "nodeType": "YulIf",
                  "src": "654:161:2"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nativeSrc": "441:380:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nativeSrc": "476:4:2",
                "nodeType": "YulTypedName",
                "src": "476:4:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nativeSrc": "485:6:2",
                "nodeType": "YulTypedName",
                "src": "485:6:2",
                "type": ""
              }
            ],
            "src": "441:380:2"
          },
          {
            "body": {
              "nativeSrc": "882:65:2",
              "nodeType": "YulBlock",
              "src": "882:65:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "899:1:2",
                        "nodeType": "YulLiteral",
                        "src": "899:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "name": "ptr",
                        "nativeSrc": "902:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "902:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "892:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "892:6:2"
                    },
                    "nativeSrc": "892:14:2",
                    "nodeType": "YulFunctionCall",
                    "src": "892:14:2"
                  },
                  "nativeSrc": "892:14:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "892:14:2"
                },
                {
                  "nativeSrc": "915:26:2",
                  "nodeType": "YulAssignment",
                  "src": "915:26:2",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "933:1:2",
                        "nodeType": "YulLiteral",
                        "src": "933:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "936:4:2",
                        "nodeType": "YulLiteral",
                        "src": "936:4:2",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "keccak256",
                      "nativeSrc": "923:9:2",
                      "nodeType": "YulIdentifier",
                      "src": "923:9:2"
                    },
                    "nativeSrc": "923:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "923:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nativeSrc": "915:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "915:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_string_storage",
            "nativeSrc": "826:121:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nativeSrc": "865:3:2",
                "nodeType": "YulTypedName",
                "src": "865:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nativeSrc": "873:4:2",
                "nodeType": "YulTypedName",
                "src": "873:4:2",
                "type": ""
              }
            ],
            "src": "826:121:2"
          },
          {
            "body": {
              "nativeSrc": "1033:437:2",
              "nodeType": "YulBlock",
              "src": "1033:437:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1066:398:2",
                    "nodeType": "YulBlock",
                    "src": "1066:398:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1087:1:2",
                              "nodeType": "YulLiteral",
                              "src": "1087:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "array",
                              "nativeSrc": "1090:5:2",
                              "nodeType": "YulIdentifier",
                              "src": "1090:5:2"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "1080:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "1080:6:2"
                          },
                          "nativeSrc": "1080:16:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1080:16:2"
                        },
                        "nativeSrc": "1080:16:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "1080:16:2"
                      },
                      {
                        "nativeSrc": "1109:30:2",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1109:30:2",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1131:1:2",
                              "nodeType": "YulLiteral",
                              "src": "1131:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1134:4:2",
                              "nodeType": "YulLiteral",
                              "src": "1134:4:2",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nativeSrc": "1121:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "1121:9:2"
                          },
                          "nativeSrc": "1121:18:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1121:18:2"
                        },
                        "variables": [
                          {
                            "name": "data",
                            "nativeSrc": "1113:4:2",
                            "nodeType": "YulTypedName",
                            "src": "1113:4:2",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "1152:57:2",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1152:57:2",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nativeSrc": "1175:4:2",
                              "nodeType": "YulIdentifier",
                              "src": "1175:4:2"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "1185:1:2",
                                  "nodeType": "YulLiteral",
                                  "src": "1185:1:2",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "startIndex",
                                      "nativeSrc": "1192:10:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "1192:10:2"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "1204:2:2",
                                      "nodeType": "YulLiteral",
                                      "src": "1204:2:2",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "1188:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1188:3:2"
                                  },
                                  "nativeSrc": "1188:19:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "1188:19:2"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nativeSrc": "1181:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "1181:3:2"
                              },
                              "nativeSrc": "1181:27:2",
                              "nodeType": "YulFunctionCall",
                              "src": "1181:27:2"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "1171:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "1171:3:2"
                          },
                          "nativeSrc": "1171:38:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1171:38:2"
                        },
                        "variables": [
                          {
                            "name": "deleteStart",
                            "nativeSrc": "1156:11:2",
                            "nodeType": "YulTypedName",
                            "src": "1156:11:2",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nativeSrc": "1246:23:2",
                          "nodeType": "YulBlock",
                          "src": "1246:23:2",
                          "statements": [
                            {
                              "nativeSrc": "1248:19:2",
                              "nodeType": "YulAssignment",
                              "src": "1248:19:2",
                              "value": {
                                "name": "data",
                                "nativeSrc": "1263:4:2",
                                "nodeType": "YulIdentifier",
                                "src": "1263:4:2"
                              },
                              "variableNames": [
                                {
                                  "name": "deleteStart",
                                  "nativeSrc": "1248:11:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1248:11:2"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "startIndex",
                              "nativeSrc": "1228:10:2",
                              "nodeType": "YulIdentifier",
                              "src": "1228:10:2"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1240:4:2",
                              "nodeType": "YulLiteral",
                              "src": "1240:4:2",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nativeSrc": "1225:2:2",
                            "nodeType": "YulIdentifier",
                            "src": "1225:2:2"
                          },
                          "nativeSrc": "1225:20:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1225:20:2"
                        },
                        "nativeSrc": "1222:47:2",
                        "nodeType": "YulIf",
                        "src": "1222:47:2"
                      },
                      {
                        "nativeSrc": "1282:41:2",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1282:41:2",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nativeSrc": "1296:4:2",
                              "nodeType": "YulIdentifier",
                              "src": "1296:4:2"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "1306:1:2",
                                  "nodeType": "YulLiteral",
                                  "src": "1306:1:2",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "len",
                                      "nativeSrc": "1313:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "1313:3:2"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "1318:2:2",
                                      "nodeType": "YulLiteral",
                                      "src": "1318:2:2",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "1309:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1309:3:2"
                                  },
                                  "nativeSrc": "1309:12:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "1309:12:2"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nativeSrc": "1302:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "1302:3:2"
                              },
                              "nativeSrc": "1302:20:2",
                              "nodeType": "YulFunctionCall",
                              "src": "1302:20:2"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "1292:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "1292:3:2"
                          },
                          "nativeSrc": "1292:31:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1292:31:2"
                        },
                        "variables": [
                          {
                            "name": "_1",
                            "nativeSrc": "1286:2:2",
                            "nodeType": "YulTypedName",
                            "src": "1286:2:2",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "1336:24:2",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1336:24:2",
                        "value": {
                          "name": "deleteStart",
                          "nativeSrc": "1349:11:2",
                          "nodeType": "YulIdentifier",
                          "src": "1349:11:2"
                        },
                        "variables": [
                          {
                            "name": "start",
                            "nativeSrc": "1340:5:2",
                            "nodeType": "YulTypedName",
                            "src": "1340:5:2",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nativeSrc": "1434:20:2",
                          "nodeType": "YulBlock",
                          "src": "1434:20:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nativeSrc": "1443:5:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1443:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1450:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "1450:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "1436:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1436:6:2"
                                },
                                "nativeSrc": "1436:16:2",
                                "nodeType": "YulFunctionCall",
                                "src": "1436:16:2"
                              },
                              "nativeSrc": "1436:16:2",
                              "nodeType": "YulExpressionStatement",
                              "src": "1436:16:2"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "start",
                              "nativeSrc": "1384:5:2",
                              "nodeType": "YulIdentifier",
                              "src": "1384:5:2"
                            },
                            {
                              "name": "_1",
                              "nativeSrc": "1391:2:2",
                              "nodeType": "YulIdentifier",
                              "src": "1391:2:2"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nativeSrc": "1381:2:2",
                            "nodeType": "YulIdentifier",
                            "src": "1381:2:2"
                          },
                          "nativeSrc": "1381:13:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1381:13:2"
                        },
                        "nativeSrc": "1373:81:2",
                        "nodeType": "YulForLoop",
                        "post": {
                          "nativeSrc": "1395:26:2",
                          "nodeType": "YulBlock",
                          "src": "1395:26:2",
                          "statements": [
                            {
                              "nativeSrc": "1397:22:2",
                              "nodeType": "YulAssignment",
                              "src": "1397:22:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nativeSrc": "1410:5:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1410:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1417:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "1417:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "1406:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1406:3:2"
                                },
                                "nativeSrc": "1406:13:2",
                                "nodeType": "YulFunctionCall",
                                "src": "1406:13:2"
                              },
                              "variableNames": [
                                {
                                  "name": "start",
                                  "nativeSrc": "1397:5:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1397:5:2"
                                }
                              ]
                            }
                          ]
                        },
                        "pre": {
                          "nativeSrc": "1377:3:2",
                          "nodeType": "YulBlock",
                          "src": "1377:3:2",
                          "statements": []
                        },
                        "src": "1373:81:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nativeSrc": "1049:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "1049:3:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1054:2:2",
                        "nodeType": "YulLiteral",
                        "src": "1054:2:2",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1046:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "1046:2:2"
                    },
                    "nativeSrc": "1046:11:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1046:11:2"
                  },
                  "nativeSrc": "1043:421:2",
                  "nodeType": "YulIf",
                  "src": "1043:421:2"
                }
              ]
            },
            "name": "clean_up_bytearray_end_slots_string_storage",
            "nativeSrc": "952:518:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nativeSrc": "1005:5:2",
                "nodeType": "YulTypedName",
                "src": "1005:5:2",
                "type": ""
              },
              {
                "name": "len",
                "nativeSrc": "1012:3:2",
                "nodeType": "YulTypedName",
                "src": "1012:3:2",
                "type": ""
              },
              {
                "name": "startIndex",
                "nativeSrc": "1017:10:2",
                "nodeType": "YulTypedName",
                "src": "1017:10:2",
                "type": ""
              }
            ],
            "src": "952:518:2"
          },
          {
            "body": {
              "nativeSrc": "1560:81:2",
              "nodeType": "YulBlock",
              "src": "1560:81:2",
              "statements": [
                {
                  "nativeSrc": "1570:65:2",
                  "nodeType": "YulAssignment",
                  "src": "1570:65:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nativeSrc": "1585:4:2",
                            "nodeType": "YulIdentifier",
                            "src": "1585:4:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1603:1:2",
                                        "nodeType": "YulLiteral",
                                        "src": "1603:1:2",
                                        "type": "",
                                        "value": "3"
                                      },
                                      {
                                        "name": "len",
                                        "nativeSrc": "1606:3:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1606:3:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "1599:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "1599:3:2"
                                    },
                                    "nativeSrc": "1599:11:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1599:11:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1616:1:2",
                                        "nodeType": "YulLiteral",
                                        "src": "1616:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nativeSrc": "1612:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "1612:3:2"
                                    },
                                    "nativeSrc": "1612:6:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1612:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nativeSrc": "1595:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1595:3:2"
                                },
                                "nativeSrc": "1595:24:2",
                                "nodeType": "YulFunctionCall",
                                "src": "1595:24:2"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "1591:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "1591:3:2"
                            },
                            "nativeSrc": "1591:29:2",
                            "nodeType": "YulFunctionCall",
                            "src": "1591:29:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "1581:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1581:3:2"
                        },
                        "nativeSrc": "1581:40:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1581:40:2"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "1627:1:2",
                            "nodeType": "YulLiteral",
                            "src": "1627:1:2",
                            "type": "",
                            "value": "1"
                          },
                          {
                            "name": "len",
                            "nativeSrc": "1630:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "1630:3:2"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "1623:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1623:3:2"
                        },
                        "nativeSrc": "1623:11:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1623:11:2"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "1578:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "1578:2:2"
                    },
                    "nativeSrc": "1578:57:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1578:57:2"
                  },
                  "variableNames": [
                    {
                      "name": "used",
                      "nativeSrc": "1570:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "1570:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "extract_used_part_and_set_length_of_short_byte_array",
            "nativeSrc": "1475:166:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nativeSrc": "1537:4:2",
                "nodeType": "YulTypedName",
                "src": "1537:4:2",
                "type": ""
              },
              {
                "name": "len",
                "nativeSrc": "1543:3:2",
                "nodeType": "YulTypedName",
                "src": "1543:3:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "used",
                "nativeSrc": "1551:4:2",
                "nodeType": "YulTypedName",
                "src": "1551:4:2",
                "type": ""
              }
            ],
            "src": "1475:166:2"
          },
          {
            "body": {
              "nativeSrc": "1742:1203:2",
              "nodeType": "YulBlock",
              "src": "1742:1203:2",
              "statements": [
                {
                  "nativeSrc": "1752:24:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1752:24:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "src",
                        "nativeSrc": "1772:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "1772:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "1766:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "1766:5:2"
                    },
                    "nativeSrc": "1766:10:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1766:10:2"
                  },
                  "variables": [
                    {
                      "name": "newLen",
                      "nativeSrc": "1756:6:2",
                      "nodeType": "YulTypedName",
                      "src": "1756:6:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1819:22:2",
                    "nodeType": "YulBlock",
                    "src": "1819:22:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "1821:16:2",
                            "nodeType": "YulIdentifier",
                            "src": "1821:16:2"
                          },
                          "nativeSrc": "1821:18:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1821:18:2"
                        },
                        "nativeSrc": "1821:18:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "1821:18:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nativeSrc": "1791:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "1791:6:2"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "1807:2:2",
                                "nodeType": "YulLiteral",
                                "src": "1807:2:2",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "1811:1:2",
                                "nodeType": "YulLiteral",
                                "src": "1811:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "1803:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "1803:3:2"
                            },
                            "nativeSrc": "1803:10:2",
                            "nodeType": "YulFunctionCall",
                            "src": "1803:10:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1815:1:2",
                            "nodeType": "YulLiteral",
                            "src": "1815:1:2",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1799:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1799:3:2"
                        },
                        "nativeSrc": "1799:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1799:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1788:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "1788:2:2"
                    },
                    "nativeSrc": "1788:30:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1788:30:2"
                  },
                  "nativeSrc": "1785:56:2",
                  "nodeType": "YulIf",
                  "src": "1785:56:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nativeSrc": "1894:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "1894:4:2"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nativeSrc": "1932:4:2",
                                "nodeType": "YulIdentifier",
                                "src": "1932:4:2"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nativeSrc": "1926:5:2",
                              "nodeType": "YulIdentifier",
                              "src": "1926:5:2"
                            },
                            "nativeSrc": "1926:11:2",
                            "nodeType": "YulFunctionCall",
                            "src": "1926:11:2"
                          }
                        ],
                        "functionName": {
                          "name": "extract_byte_array_length",
                          "nativeSrc": "1900:25:2",
                          "nodeType": "YulIdentifier",
                          "src": "1900:25:2"
                        },
                        "nativeSrc": "1900:38:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1900:38:2"
                      },
                      {
                        "name": "newLen",
                        "nativeSrc": "1940:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "1940:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_string_storage",
                      "nativeSrc": "1850:43:2",
                      "nodeType": "YulIdentifier",
                      "src": "1850:43:2"
                    },
                    "nativeSrc": "1850:97:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1850:97:2"
                  },
                  "nativeSrc": "1850:97:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "1850:97:2"
                },
                {
                  "nativeSrc": "1956:18:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1956:18:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "1973:1:2",
                    "nodeType": "YulLiteral",
                    "src": "1973:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nativeSrc": "1960:9:2",
                      "nodeType": "YulTypedName",
                      "src": "1960:9:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1983:17:2",
                  "nodeType": "YulAssignment",
                  "src": "1983:17:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "1996:4:2",
                    "nodeType": "YulLiteral",
                    "src": "1996:4:2",
                    "type": "",
                    "value": "0x20"
                  },
                  "variableNames": [
                    {
                      "name": "srcOffset",
                      "nativeSrc": "1983:9:2",
                      "nodeType": "YulIdentifier",
                      "src": "1983:9:2"
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nativeSrc": "2046:642:2",
                        "nodeType": "YulBlock",
                        "src": "2046:642:2",
                        "statements": [
                          {
                            "nativeSrc": "2060:35:2",
                            "nodeType": "YulVariableDeclaration",
                            "src": "2060:35:2",
                            "value": {
                              "arguments": [
                                {
                                  "name": "newLen",
                                  "nativeSrc": "2079:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2079:6:2"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nativeSrc": "2091:2:2",
                                      "nodeType": "YulLiteral",
                                      "src": "2091:2:2",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nativeSrc": "2087:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2087:3:2"
                                  },
                                  "nativeSrc": "2087:7:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "2087:7:2"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nativeSrc": "2075:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "2075:3:2"
                              },
                              "nativeSrc": "2075:20:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2075:20:2"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nativeSrc": "2064:7:2",
                                "nodeType": "YulTypedName",
                                "src": "2064:7:2",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nativeSrc": "2108:49:2",
                            "nodeType": "YulVariableDeclaration",
                            "src": "2108:49:2",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "2152:4:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2152:4:2"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_string_storage",
                                "nativeSrc": "2122:29:2",
                                "nodeType": "YulIdentifier",
                                "src": "2122:29:2"
                              },
                              "nativeSrc": "2122:35:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2122:35:2"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nativeSrc": "2112:6:2",
                                "nodeType": "YulTypedName",
                                "src": "2112:6:2",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nativeSrc": "2170:10:2",
                            "nodeType": "YulVariableDeclaration",
                            "src": "2170:10:2",
                            "value": {
                              "kind": "number",
                              "nativeSrc": "2179:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2179:1:2",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nativeSrc": "2174:1:2",
                                "nodeType": "YulTypedName",
                                "src": "2174:1:2",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nativeSrc": "2250:165:2",
                              "nodeType": "YulBlock",
                              "src": "2250:165:2",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nativeSrc": "2275:6:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2275:6:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nativeSrc": "2293:3:2",
                                                "nodeType": "YulIdentifier",
                                                "src": "2293:3:2"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nativeSrc": "2298:9:2",
                                                "nodeType": "YulIdentifier",
                                                "src": "2298:9:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nativeSrc": "2289:3:2",
                                              "nodeType": "YulIdentifier",
                                              "src": "2289:3:2"
                                            },
                                            "nativeSrc": "2289:19:2",
                                            "nodeType": "YulFunctionCall",
                                            "src": "2289:19:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nativeSrc": "2283:5:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2283:5:2"
                                        },
                                        "nativeSrc": "2283:26:2",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2283:26:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nativeSrc": "2268:6:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2268:6:2"
                                    },
                                    "nativeSrc": "2268:42:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2268:42:2"
                                  },
                                  "nativeSrc": "2268:42:2",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "2268:42:2"
                                },
                                {
                                  "nativeSrc": "2327:24:2",
                                  "nodeType": "YulAssignment",
                                  "src": "2327:24:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nativeSrc": "2341:6:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2341:6:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "2349:1:2",
                                        "nodeType": "YulLiteral",
                                        "src": "2349:1:2",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "2337:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2337:3:2"
                                    },
                                    "nativeSrc": "2337:14:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2337:14:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nativeSrc": "2327:6:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2327:6:2"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "2368:33:2",
                                  "nodeType": "YulAssignment",
                                  "src": "2368:33:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nativeSrc": "2385:9:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2385:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "2396:4:2",
                                        "nodeType": "YulLiteral",
                                        "src": "2396:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "2381:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2381:3:2"
                                    },
                                    "nativeSrc": "2381:20:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2381:20:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nativeSrc": "2368:9:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2368:9:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nativeSrc": "2204:1:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2204:1:2"
                                },
                                {
                                  "name": "loopEnd",
                                  "nativeSrc": "2207:7:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2207:7:2"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nativeSrc": "2201:2:2",
                                "nodeType": "YulIdentifier",
                                "src": "2201:2:2"
                              },
                              "nativeSrc": "2201:14:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2201:14:2"
                            },
                            "nativeSrc": "2193:222:2",
                            "nodeType": "YulForLoop",
                            "post": {
                              "nativeSrc": "2216:21:2",
                              "nodeType": "YulBlock",
                              "src": "2216:21:2",
                              "statements": [
                                {
                                  "nativeSrc": "2218:17:2",
                                  "nodeType": "YulAssignment",
                                  "src": "2218:17:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nativeSrc": "2227:1:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2227:1:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "2230:4:2",
                                        "nodeType": "YulLiteral",
                                        "src": "2230:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "2223:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2223:3:2"
                                    },
                                    "nativeSrc": "2223:12:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2223:12:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nativeSrc": "2218:1:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:1:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nativeSrc": "2197:3:2",
                              "nodeType": "YulBlock",
                              "src": "2197:3:2",
                              "statements": []
                            },
                            "src": "2193:222:2"
                          },
                          {
                            "body": {
                              "nativeSrc": "2463:166:2",
                              "nodeType": "YulBlock",
                              "src": "2463:166:2",
                              "statements": [
                                {
                                  "nativeSrc": "2481:43:2",
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "2481:43:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nativeSrc": "2508:3:2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2508:3:2"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nativeSrc": "2513:9:2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2513:9:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "2504:3:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2504:3:2"
                                        },
                                        "nativeSrc": "2504:19:2",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2504:19:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "2498:5:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2498:5:2"
                                    },
                                    "nativeSrc": "2498:26:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2498:26:2"
                                  },
                                  "variables": [
                                    {
                                      "name": "lastValue",
                                      "nativeSrc": "2485:9:2",
                                      "nodeType": "YulTypedName",
                                      "src": "2485:9:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nativeSrc": "2548:6:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2548:6:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "lastValue",
                                            "nativeSrc": "2560:9:2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2560:9:2"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nativeSrc": "2587:1:2",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2587:1:2",
                                                            "type": "",
                                                            "value": "3"
                                                          },
                                                          {
                                                            "name": "newLen",
                                                            "nativeSrc": "2590:6:2",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2590:6:2"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nativeSrc": "2583:3:2",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2583:3:2"
                                                        },
                                                        "nativeSrc": "2583:14:2",
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2583:14:2"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nativeSrc": "2599:3:2",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2599:3:2",
                                                        "type": "",
                                                        "value": "248"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nativeSrc": "2579:3:2",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2579:3:2"
                                                    },
                                                    "nativeSrc": "2579:24:2",
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2579:24:2"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nativeSrc": "2609:1:2",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2609:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "not",
                                                      "nativeSrc": "2605:3:2",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2605:3:2"
                                                    },
                                                    "nativeSrc": "2605:6:2",
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2605:6:2"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shr",
                                                  "nativeSrc": "2575:3:2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2575:3:2"
                                                },
                                                "nativeSrc": "2575:37:2",
                                                "nodeType": "YulFunctionCall",
                                                "src": "2575:37:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nativeSrc": "2571:3:2",
                                              "nodeType": "YulIdentifier",
                                              "src": "2571:3:2"
                                            },
                                            "nativeSrc": "2571:42:2",
                                            "nodeType": "YulFunctionCall",
                                            "src": "2571:42:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nativeSrc": "2556:3:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2556:3:2"
                                        },
                                        "nativeSrc": "2556:58:2",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2556:58:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nativeSrc": "2541:6:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2541:6:2"
                                    },
                                    "nativeSrc": "2541:74:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2541:74:2"
                                  },
                                  "nativeSrc": "2541:74:2",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "2541:74:2"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nativeSrc": "2434:7:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2434:7:2"
                                },
                                {
                                  "name": "newLen",
                                  "nativeSrc": "2443:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2443:6:2"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nativeSrc": "2431:2:2",
                                "nodeType": "YulIdentifier",
                                "src": "2431:2:2"
                              },
                              "nativeSrc": "2431:19:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2431:19:2"
                            },
                            "nativeSrc": "2428:201:2",
                            "nodeType": "YulIf",
                            "src": "2428:201:2"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "2649:4:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2649:4:2"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nativeSrc": "2663:1:2",
                                          "nodeType": "YulLiteral",
                                          "src": "2663:1:2",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "newLen",
                                          "nativeSrc": "2666:6:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2666:6:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nativeSrc": "2659:3:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2659:3:2"
                                      },
                                      "nativeSrc": "2659:14:2",
                                      "nodeType": "YulFunctionCall",
                                      "src": "2659:14:2"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "2675:1:2",
                                      "nodeType": "YulLiteral",
                                      "src": "2675:1:2",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "2655:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2655:3:2"
                                  },
                                  "nativeSrc": "2655:22:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "2655:22:2"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nativeSrc": "2642:6:2",
                                "nodeType": "YulIdentifier",
                                "src": "2642:6:2"
                              },
                              "nativeSrc": "2642:36:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2642:36:2"
                            },
                            "nativeSrc": "2642:36:2",
                            "nodeType": "YulExpressionStatement",
                            "src": "2642:36:2"
                          }
                        ]
                      },
                      "nativeSrc": "2039:649:2",
                      "nodeType": "YulCase",
                      "src": "2039:649:2",
                      "value": {
                        "kind": "number",
                        "nativeSrc": "2044:1:2",
                        "nodeType": "YulLiteral",
                        "src": "2044:1:2",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nativeSrc": "2705:234:2",
                        "nodeType": "YulBlock",
                        "src": "2705:234:2",
                        "statements": [
                          {
                            "nativeSrc": "2719:14:2",
                            "nodeType": "YulVariableDeclaration",
                            "src": "2719:14:2",
                            "value": {
                              "kind": "number",
                              "nativeSrc": "2732:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2732:1:2",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nativeSrc": "2723:5:2",
                                "nodeType": "YulTypedName",
                                "src": "2723:5:2",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nativeSrc": "2768:67:2",
                              "nodeType": "YulBlock",
                              "src": "2768:67:2",
                              "statements": [
                                {
                                  "nativeSrc": "2786:35:2",
                                  "nodeType": "YulAssignment",
                                  "src": "2786:35:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nativeSrc": "2805:3:2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2805:3:2"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nativeSrc": "2810:9:2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2810:9:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "2801:3:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2801:3:2"
                                        },
                                        "nativeSrc": "2801:19:2",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2801:19:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "2795:5:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2795:5:2"
                                    },
                                    "nativeSrc": "2795:26:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2795:26:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nativeSrc": "2786:5:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2786:5:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "newLen",
                              "nativeSrc": "2749:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "2749:6:2"
                            },
                            "nativeSrc": "2746:89:2",
                            "nodeType": "YulIf",
                            "src": "2746:89:2"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "2855:4:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2855:4:2"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nativeSrc": "2914:5:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2914:5:2"
                                    },
                                    {
                                      "name": "newLen",
                                      "nativeSrc": "2921:6:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "2921:6:2"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nativeSrc": "2861:52:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2861:52:2"
                                  },
                                  "nativeSrc": "2861:67:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "2861:67:2"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nativeSrc": "2848:6:2",
                                "nodeType": "YulIdentifier",
                                "src": "2848:6:2"
                              },
                              "nativeSrc": "2848:81:2",
                              "nodeType": "YulFunctionCall",
                              "src": "2848:81:2"
                            },
                            "nativeSrc": "2848:81:2",
                            "nodeType": "YulExpressionStatement",
                            "src": "2848:81:2"
                          }
                        ]
                      },
                      "nativeSrc": "2697:242:2",
                      "nodeType": "YulCase",
                      "src": "2697:242:2",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nativeSrc": "2019:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "2019:6:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2027:2:2",
                        "nodeType": "YulLiteral",
                        "src": "2027:2:2",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "2016:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "2016:2:2"
                    },
                    "nativeSrc": "2016:14:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2016:14:2"
                  },
                  "nativeSrc": "2009:930:2",
                  "nodeType": "YulSwitch",
                  "src": "2009:930:2"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
            "nativeSrc": "1646:1299:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nativeSrc": "1727:4:2",
                "nodeType": "YulTypedName",
                "src": "1727:4:2",
                "type": ""
              },
              {
                "name": "src",
                "nativeSrc": "1733:3:2",
                "nodeType": "YulTypedName",
                "src": "1733:3:2",
                "type": ""
              }
            ],
            "src": "1646:1299:2"
          },
          {
            "body": {
              "nativeSrc": "3163:276:2",
              "nodeType": "YulBlock",
              "src": "3163:276:2",
              "statements": [
                {
                  "nativeSrc": "3173:27:2",
                  "nodeType": "YulAssignment",
                  "src": "3173:27:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3185:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "3185:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3196:3:2",
                        "nodeType": "YulLiteral",
                        "src": "3196:3:2",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3181:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "3181:3:2"
                    },
                    "nativeSrc": "3181:19:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3181:19:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3173:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "3173:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3216:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "3216:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "3227:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "3227:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3209:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3209:6:2"
                    },
                    "nativeSrc": "3209:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3209:25:2"
                  },
                  "nativeSrc": "3209:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "3209:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3254:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3254:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3265:2:2",
                            "nodeType": "YulLiteral",
                            "src": "3265:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3250:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3250:3:2"
                        },
                        "nativeSrc": "3250:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3250:18:2"
                      },
                      {
                        "name": "value1",
                        "nativeSrc": "3270:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "3270:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3243:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3243:6:2"
                    },
                    "nativeSrc": "3243:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3243:34:2"
                  },
                  "nativeSrc": "3243:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "3243:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3297:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3297:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3308:2:2",
                            "nodeType": "YulLiteral",
                            "src": "3308:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3293:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3293:3:2"
                        },
                        "nativeSrc": "3293:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3293:18:2"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "3313:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "3313:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3286:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3286:6:2"
                    },
                    "nativeSrc": "3286:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3286:34:2"
                  },
                  "nativeSrc": "3286:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "3286:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3340:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3340:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3351:2:2",
                            "nodeType": "YulLiteral",
                            "src": "3351:2:2",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3336:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3336:3:2"
                        },
                        "nativeSrc": "3336:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3336:18:2"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "3356:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "3356:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3329:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3329:6:2"
                    },
                    "nativeSrc": "3329:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3329:34:2"
                  },
                  "nativeSrc": "3329:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "3329:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3383:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3383:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3394:3:2",
                            "nodeType": "YulLiteral",
                            "src": "3394:3:2",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3379:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3379:3:2"
                        },
                        "nativeSrc": "3379:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3379:19:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nativeSrc": "3404:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "3404:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3420:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "3420:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3425:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "3425:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "3416:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3416:3:2"
                                },
                                "nativeSrc": "3416:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "3416:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "3429:1:2",
                                "nodeType": "YulLiteral",
                                "src": "3429:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "3412:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "3412:3:2"
                            },
                            "nativeSrc": "3412:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "3412:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "3400:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3400:3:2"
                        },
                        "nativeSrc": "3400:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3400:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3372:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3372:6:2"
                    },
                    "nativeSrc": "3372:61:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3372:61:2"
                  },
                  "nativeSrc": "3372:61:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "3372:61:2"
                }
              ]
            },
            "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",
            "nativeSrc": "2950:489:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3100:9:2",
                "nodeType": "YulTypedName",
                "src": "3100:9:2",
                "type": ""
              },
              {
                "name": "value4",
                "nativeSrc": "3111:6:2",
                "nodeType": "YulTypedName",
                "src": "3111:6:2",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "3119:6:2",
                "nodeType": "YulTypedName",
                "src": "3119:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "3127:6:2",
                "nodeType": "YulTypedName",
                "src": "3127:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "3135:6:2",
                "nodeType": "YulTypedName",
                "src": "3135:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "3143:6:2",
                "nodeType": "YulTypedName",
                "src": "3143:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3154:4:2",
                "nodeType": "YulTypedName",
                "src": "3154:4:2",
                "type": ""
              }
            ],
            "src": "2950:489:2"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            mstore(0, array)\n            let data := keccak256(0, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _1 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _1) { start := add(start, 1) }\n            { sstore(start, 0) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        srcOffset := 0x20\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 0x20)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\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}",
      "id": 2,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:7100:2",
        "nodeType": "YulBlock",
        "src": "0:7100:2",
        "statements": [
          {
            "nativeSrc": "6:3:2",
            "nodeType": "YulBlock",
            "src": "6:3:2",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "135:406:2",
              "nodeType": "YulBlock",
              "src": "135:406:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "152:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "152:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "163:2:2",
                        "nodeType": "YulLiteral",
                        "src": "163:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "145:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "145:6:2"
                    },
                    "nativeSrc": "145:21:2",
                    "nodeType": "YulFunctionCall",
                    "src": "145:21:2"
                  },
                  "nativeSrc": "145:21:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "145:21:2"
                },
                {
                  "nativeSrc": "175:27:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "175:27:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "195:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "195:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "189:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "189:5:2"
                    },
                    "nativeSrc": "189:13:2",
                    "nodeType": "YulFunctionCall",
                    "src": "189:13:2"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "179:6:2",
                      "nodeType": "YulTypedName",
                      "src": "179:6:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "222:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "222:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "233:2:2",
                            "nodeType": "YulLiteral",
                            "src": "233:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "218:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "218:3:2"
                        },
                        "nativeSrc": "218:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "218:18:2"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "238:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "238:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "211:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "211:6:2"
                    },
                    "nativeSrc": "211:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "211:34:2"
                  },
                  "nativeSrc": "211:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "211:34:2"
                },
                {
                  "nativeSrc": "254:10:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "254:10:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "263:1:2",
                    "nodeType": "YulLiteral",
                    "src": "263:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nativeSrc": "258:1:2",
                      "nodeType": "YulTypedName",
                      "src": "258:1:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "323:90:2",
                    "nodeType": "YulBlock",
                    "src": "323:90:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nativeSrc": "352:9:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "352:9:2"
                                    },
                                    {
                                      "name": "i",
                                      "nativeSrc": "363:1:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "363:1:2"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "348:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "348:3:2"
                                  },
                                  "nativeSrc": "348:17:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "348:17:2"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "367:2:2",
                                  "nodeType": "YulLiteral",
                                  "src": "367:2:2",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "344:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "344:3:2"
                              },
                              "nativeSrc": "344:26:2",
                              "nodeType": "YulFunctionCall",
                              "src": "344:26:2"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nativeSrc": "386:6:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "386:6:2"
                                        },
                                        {
                                          "name": "i",
                                          "nativeSrc": "394:1:2",
                                          "nodeType": "YulIdentifier",
                                          "src": "394:1:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nativeSrc": "382:3:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "382:3:2"
                                      },
                                      "nativeSrc": "382:14:2",
                                      "nodeType": "YulFunctionCall",
                                      "src": "382:14:2"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "398:2:2",
                                      "nodeType": "YulLiteral",
                                      "src": "398:2:2",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "378:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "378:3:2"
                                  },
                                  "nativeSrc": "378:23:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "378:23:2"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "372:5:2",
                                "nodeType": "YulIdentifier",
                                "src": "372:5:2"
                              },
                              "nativeSrc": "372:30:2",
                              "nodeType": "YulFunctionCall",
                              "src": "372:30:2"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "337:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "337:6:2"
                          },
                          "nativeSrc": "337:66:2",
                          "nodeType": "YulFunctionCall",
                          "src": "337:66:2"
                        },
                        "nativeSrc": "337:66:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "337:66:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nativeSrc": "284:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "284:1:2"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "287:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "287:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nativeSrc": "281:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "281:2:2"
                    },
                    "nativeSrc": "281:13:2",
                    "nodeType": "YulFunctionCall",
                    "src": "281:13:2"
                  },
                  "nativeSrc": "273:140:2",
                  "nodeType": "YulForLoop",
                  "post": {
                    "nativeSrc": "295:19:2",
                    "nodeType": "YulBlock",
                    "src": "295:19:2",
                    "statements": [
                      {
                        "nativeSrc": "297:15:2",
                        "nodeType": "YulAssignment",
                        "src": "297:15:2",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nativeSrc": "306:1:2",
                              "nodeType": "YulIdentifier",
                              "src": "306:1:2"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "309:2:2",
                              "nodeType": "YulLiteral",
                              "src": "309:2:2",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "302:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "302:3:2"
                          },
                          "nativeSrc": "302:10:2",
                          "nodeType": "YulFunctionCall",
                          "src": "302:10:2"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nativeSrc": "297:1:2",
                            "nodeType": "YulIdentifier",
                            "src": "297:1:2"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nativeSrc": "277:3:2",
                    "nodeType": "YulBlock",
                    "src": "277:3:2",
                    "statements": []
                  },
                  "src": "273:140:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nativeSrc": "437:9:2",
                                "nodeType": "YulIdentifier",
                                "src": "437:9:2"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "448:6:2",
                                "nodeType": "YulIdentifier",
                                "src": "448:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "433:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "433:3:2"
                            },
                            "nativeSrc": "433:22:2",
                            "nodeType": "YulFunctionCall",
                            "src": "433:22:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "457:2:2",
                            "nodeType": "YulLiteral",
                            "src": "457:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "429:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "429:3:2"
                        },
                        "nativeSrc": "429:31:2",
                        "nodeType": "YulFunctionCall",
                        "src": "429:31:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "462:1:2",
                        "nodeType": "YulLiteral",
                        "src": "462:1:2",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "422:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "422:6:2"
                    },
                    "nativeSrc": "422:42:2",
                    "nodeType": "YulFunctionCall",
                    "src": "422:42:2"
                  },
                  "nativeSrc": "422:42:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "422:42:2"
                },
                {
                  "nativeSrc": "473:62:2",
                  "nodeType": "YulAssignment",
                  "src": "473:62:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "489:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "489:9:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "508:6:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "508:6:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "516:2:2",
                                    "nodeType": "YulLiteral",
                                    "src": "516:2:2",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "504:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "504:3:2"
                                },
                                "nativeSrc": "504:15:2",
                                "nodeType": "YulFunctionCall",
                                "src": "504:15:2"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "525:2:2",
                                    "nodeType": "YulLiteral",
                                    "src": "525:2:2",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "521:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "521:3:2"
                                },
                                "nativeSrc": "521:7:2",
                                "nodeType": "YulFunctionCall",
                                "src": "521:7:2"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "500:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "500:3:2"
                            },
                            "nativeSrc": "500:29:2",
                            "nodeType": "YulFunctionCall",
                            "src": "500:29:2"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "485:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "485:3:2"
                        },
                        "nativeSrc": "485:45:2",
                        "nodeType": "YulFunctionCall",
                        "src": "485:45:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "532:2:2",
                        "nodeType": "YulLiteral",
                        "src": "532:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "481:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "481:3:2"
                    },
                    "nativeSrc": "481:54:2",
                    "nodeType": "YulFunctionCall",
                    "src": "481:54:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "473:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "473:4:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "14:527:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "104:9:2",
                "nodeType": "YulTypedName",
                "src": "104:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "115:6:2",
                "nodeType": "YulTypedName",
                "src": "115:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "126:4:2",
                "nodeType": "YulTypedName",
                "src": "126:4:2",
                "type": ""
              }
            ],
            "src": "14:527:2"
          },
          {
            "body": {
              "nativeSrc": "595:124:2",
              "nodeType": "YulBlock",
              "src": "595:124:2",
              "statements": [
                {
                  "nativeSrc": "605:29:2",
                  "nodeType": "YulAssignment",
                  "src": "605:29:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "627:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "627:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "614:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "614:12:2"
                    },
                    "nativeSrc": "614:20:2",
                    "nodeType": "YulFunctionCall",
                    "src": "614:20:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "605:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "605:5:2"
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "697:16:2",
                    "nodeType": "YulBlock",
                    "src": "697:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "706:1:2",
                              "nodeType": "YulLiteral",
                              "src": "706:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "709:1:2",
                              "nodeType": "YulLiteral",
                              "src": "709:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "699:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "699:6:2"
                          },
                          "nativeSrc": "699:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "699:12:2"
                        },
                        "nativeSrc": "699:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "699:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "656:5:2",
                            "nodeType": "YulIdentifier",
                            "src": "656:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "667:5:2",
                                "nodeType": "YulIdentifier",
                                "src": "667:5:2"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "682:3:2",
                                        "nodeType": "YulLiteral",
                                        "src": "682:3:2",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "687:1:2",
                                        "nodeType": "YulLiteral",
                                        "src": "687:1:2",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "678:3:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "678:3:2"
                                    },
                                    "nativeSrc": "678:11:2",
                                    "nodeType": "YulFunctionCall",
                                    "src": "678:11:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "691:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "691:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "674:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "674:3:2"
                                },
                                "nativeSrc": "674:19:2",
                                "nodeType": "YulFunctionCall",
                                "src": "674:19:2"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "663:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "663:3:2"
                            },
                            "nativeSrc": "663:31:2",
                            "nodeType": "YulFunctionCall",
                            "src": "663:31:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "653:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "653:2:2"
                        },
                        "nativeSrc": "653:42:2",
                        "nodeType": "YulFunctionCall",
                        "src": "653:42:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "646:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "646:6:2"
                    },
                    "nativeSrc": "646:50:2",
                    "nodeType": "YulFunctionCall",
                    "src": "646:50:2"
                  },
                  "nativeSrc": "643:70:2",
                  "nodeType": "YulIf",
                  "src": "643:70:2"
                }
              ]
            },
            "name": "abi_decode_address",
            "nativeSrc": "546:173:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nativeSrc": "574:6:2",
                "nodeType": "YulTypedName",
                "src": "574:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nativeSrc": "585:5:2",
                "nodeType": "YulTypedName",
                "src": "585:5:2",
                "type": ""
              }
            ],
            "src": "546:173:2"
          },
          {
            "body": {
              "nativeSrc": "811:213:2",
              "nodeType": "YulBlock",
              "src": "811:213:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "857:16:2",
                    "nodeType": "YulBlock",
                    "src": "857:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "866:1:2",
                              "nodeType": "YulLiteral",
                              "src": "866:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "869:1:2",
                              "nodeType": "YulLiteral",
                              "src": "869:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "859:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "859:6:2"
                          },
                          "nativeSrc": "859:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "859:12:2"
                        },
                        "nativeSrc": "859:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "859:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "832:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "832:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "841:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "841:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "828:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "828:3:2"
                        },
                        "nativeSrc": "828:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "828:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "853:2:2",
                        "nodeType": "YulLiteral",
                        "src": "853:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "824:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "824:3:2"
                    },
                    "nativeSrc": "824:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "824:32:2"
                  },
                  "nativeSrc": "821:52:2",
                  "nodeType": "YulIf",
                  "src": "821:52:2"
                },
                {
                  "nativeSrc": "882:39:2",
                  "nodeType": "YulAssignment",
                  "src": "882:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "911:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "911:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "892:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "892:18:2"
                    },
                    "nativeSrc": "892:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "892:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "882:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "882:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "930:14:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "930:14:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "943:1:2",
                    "nodeType": "YulLiteral",
                    "src": "943:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "934:5:2",
                      "nodeType": "YulTypedName",
                      "src": "934:5:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "953:41:2",
                  "nodeType": "YulAssignment",
                  "src": "953:41:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "979:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "979:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "990:2:2",
                            "nodeType": "YulLiteral",
                            "src": "990:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "975:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "975:3:2"
                        },
                        "nativeSrc": "975:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "975:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "962:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "962:12:2"
                    },
                    "nativeSrc": "962:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "962:32:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "953:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "953:5:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "1003:15:2",
                  "nodeType": "YulAssignment",
                  "src": "1003:15:2",
                  "value": {
                    "name": "value",
                    "nativeSrc": "1013:5:2",
                    "nodeType": "YulIdentifier",
                    "src": "1013:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1003:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1003:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nativeSrc": "724:300:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "769:9:2",
                "nodeType": "YulTypedName",
                "src": "769:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "780:7:2",
                "nodeType": "YulTypedName",
                "src": "780:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "792:6:2",
                "nodeType": "YulTypedName",
                "src": "792:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "800:6:2",
                "nodeType": "YulTypedName",
                "src": "800:6:2",
                "type": ""
              }
            ],
            "src": "724:300:2"
          },
          {
            "body": {
              "nativeSrc": "1124:92:2",
              "nodeType": "YulBlock",
              "src": "1124:92:2",
              "statements": [
                {
                  "nativeSrc": "1134:26:2",
                  "nodeType": "YulAssignment",
                  "src": "1134:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1146:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1146:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1157:2:2",
                        "nodeType": "YulLiteral",
                        "src": "1157:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1142:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "1142:3:2"
                    },
                    "nativeSrc": "1142:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1142:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "1134:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "1134:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1176:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1176:9:2"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nativeSrc": "1201:6:2",
                                "nodeType": "YulIdentifier",
                                "src": "1201:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "1194:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "1194:6:2"
                            },
                            "nativeSrc": "1194:14:2",
                            "nodeType": "YulFunctionCall",
                            "src": "1194:14:2"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nativeSrc": "1187:6:2",
                          "nodeType": "YulIdentifier",
                          "src": "1187:6:2"
                        },
                        "nativeSrc": "1187:22:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1187:22:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1169:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1169:6:2"
                    },
                    "nativeSrc": "1169:41:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1169:41:2"
                  },
                  "nativeSrc": "1169:41:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "1169:41:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nativeSrc": "1029:187:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1093:9:2",
                "nodeType": "YulTypedName",
                "src": "1093:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "1104:6:2",
                "nodeType": "YulTypedName",
                "src": "1104:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "1115:4:2",
                "nodeType": "YulTypedName",
                "src": "1115:4:2",
                "type": ""
              }
            ],
            "src": "1029:187:2"
          },
          {
            "body": {
              "nativeSrc": "1322:76:2",
              "nodeType": "YulBlock",
              "src": "1322:76:2",
              "statements": [
                {
                  "nativeSrc": "1332:26:2",
                  "nodeType": "YulAssignment",
                  "src": "1332:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1344:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1344:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1355:2:2",
                        "nodeType": "YulLiteral",
                        "src": "1355:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1340:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "1340:3:2"
                    },
                    "nativeSrc": "1340:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1340:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "1332:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "1332:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1374:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1374:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "1385:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "1385:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1367:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1367:6:2"
                    },
                    "nativeSrc": "1367:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1367:25:2"
                  },
                  "nativeSrc": "1367:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "1367:25:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nativeSrc": "1221:177:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1291:9:2",
                "nodeType": "YulTypedName",
                "src": "1291:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "1302:6:2",
                "nodeType": "YulTypedName",
                "src": "1302:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "1313:4:2",
                "nodeType": "YulTypedName",
                "src": "1313:4:2",
                "type": ""
              }
            ],
            "src": "1221:177:2"
          },
          {
            "body": {
              "nativeSrc": "1507:270:2",
              "nodeType": "YulBlock",
              "src": "1507:270:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1553:16:2",
                    "nodeType": "YulBlock",
                    "src": "1553:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1562:1:2",
                              "nodeType": "YulLiteral",
                              "src": "1562:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1565:1:2",
                              "nodeType": "YulLiteral",
                              "src": "1565:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1555:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "1555:6:2"
                          },
                          "nativeSrc": "1555:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "1555:12:2"
                        },
                        "nativeSrc": "1555:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "1555:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1528:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "1528:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1537:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "1537:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1524:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1524:3:2"
                        },
                        "nativeSrc": "1524:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1524:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1549:2:2",
                        "nodeType": "YulLiteral",
                        "src": "1549:2:2",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1520:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "1520:3:2"
                    },
                    "nativeSrc": "1520:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1520:32:2"
                  },
                  "nativeSrc": "1517:52:2",
                  "nodeType": "YulIf",
                  "src": "1517:52:2"
                },
                {
                  "nativeSrc": "1578:39:2",
                  "nodeType": "YulAssignment",
                  "src": "1578:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1607:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1607:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "1588:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "1588:18:2"
                    },
                    "nativeSrc": "1588:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1588:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1578:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1578:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "1626:48:2",
                  "nodeType": "YulAssignment",
                  "src": "1626:48:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1659:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "1659:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1670:2:2",
                            "nodeType": "YulLiteral",
                            "src": "1670:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1655:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1655:3:2"
                        },
                        "nativeSrc": "1655:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1655:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "1636:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "1636:18:2"
                    },
                    "nativeSrc": "1636:38:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1636:38:2"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1626:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1626:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "1683:14:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1683:14:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "1696:1:2",
                    "nodeType": "YulLiteral",
                    "src": "1696:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "1687:5:2",
                      "nodeType": "YulTypedName",
                      "src": "1687:5:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1706:41:2",
                  "nodeType": "YulAssignment",
                  "src": "1706:41:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1732:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "1732:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1743:2:2",
                            "nodeType": "YulLiteral",
                            "src": "1743:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1728:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "1728:3:2"
                        },
                        "nativeSrc": "1728:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "1728:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1715:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "1715:12:2"
                    },
                    "nativeSrc": "1715:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1715:32:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "1706:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "1706:5:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "1756:15:2",
                  "nodeType": "YulAssignment",
                  "src": "1756:15:2",
                  "value": {
                    "name": "value",
                    "nativeSrc": "1766:5:2",
                    "nodeType": "YulIdentifier",
                    "src": "1766:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nativeSrc": "1756:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1756:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256",
            "nativeSrc": "1403:374:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1457:9:2",
                "nodeType": "YulTypedName",
                "src": "1457:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1468:7:2",
                "nodeType": "YulTypedName",
                "src": "1468:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1480:6:2",
                "nodeType": "YulTypedName",
                "src": "1480:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1488:6:2",
                "nodeType": "YulTypedName",
                "src": "1488:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "1496:6:2",
                "nodeType": "YulTypedName",
                "src": "1496:6:2",
                "type": ""
              }
            ],
            "src": "1403:374:2"
          },
          {
            "body": {
              "nativeSrc": "1883:76:2",
              "nodeType": "YulBlock",
              "src": "1883:76:2",
              "statements": [
                {
                  "nativeSrc": "1893:26:2",
                  "nodeType": "YulAssignment",
                  "src": "1893:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1905:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1905:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1916:2:2",
                        "nodeType": "YulLiteral",
                        "src": "1916:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1901:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "1901:3:2"
                    },
                    "nativeSrc": "1901:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1901:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "1893:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "1893:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1935:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "1935:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "1946:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "1946:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1928:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "1928:6:2"
                    },
                    "nativeSrc": "1928:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "1928:25:2"
                  },
                  "nativeSrc": "1928:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "1928:25:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nativeSrc": "1782:177:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1852:9:2",
                "nodeType": "YulTypedName",
                "src": "1852:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "1863:6:2",
                "nodeType": "YulTypedName",
                "src": "1863:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "1874:4:2",
                "nodeType": "YulTypedName",
                "src": "1874:4:2",
                "type": ""
              }
            ],
            "src": "1782:177:2"
          },
          {
            "body": {
              "nativeSrc": "2061:87:2",
              "nodeType": "YulBlock",
              "src": "2061:87:2",
              "statements": [
                {
                  "nativeSrc": "2071:26:2",
                  "nodeType": "YulAssignment",
                  "src": "2071:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2083:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "2083:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2094:2:2",
                        "nodeType": "YulLiteral",
                        "src": "2094:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2079:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "2079:3:2"
                    },
                    "nativeSrc": "2079:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2079:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2071:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "2071:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2113:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "2113:9:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "2128:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "2128:6:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2136:4:2",
                            "nodeType": "YulLiteral",
                            "src": "2136:4:2",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "2124:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2124:3:2"
                        },
                        "nativeSrc": "2124:17:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2124:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2106:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2106:6:2"
                    },
                    "nativeSrc": "2106:36:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2106:36:2"
                  },
                  "nativeSrc": "2106:36:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "2106:36:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nativeSrc": "1964:184:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2030:9:2",
                "nodeType": "YulTypedName",
                "src": "2030:9:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2041:6:2",
                "nodeType": "YulTypedName",
                "src": "2041:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2052:4:2",
                "nodeType": "YulTypedName",
                "src": "2052:4:2",
                "type": ""
              }
            ],
            "src": "1964:184:2"
          },
          {
            "body": {
              "nativeSrc": "2223:116:2",
              "nodeType": "YulBlock",
              "src": "2223:116:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "2269:16:2",
                    "nodeType": "YulBlock",
                    "src": "2269:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2278:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2278:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2281:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2281:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2271:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "2271:6:2"
                          },
                          "nativeSrc": "2271:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "2271:12:2"
                        },
                        "nativeSrc": "2271:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "2271:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "2244:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "2244:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "2253:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2253:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "2240:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2240:3:2"
                        },
                        "nativeSrc": "2240:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2240:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2265:2:2",
                        "nodeType": "YulLiteral",
                        "src": "2265:2:2",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "2236:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "2236:3:2"
                    },
                    "nativeSrc": "2236:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2236:32:2"
                  },
                  "nativeSrc": "2233:52:2",
                  "nodeType": "YulIf",
                  "src": "2233:52:2"
                },
                {
                  "nativeSrc": "2294:39:2",
                  "nodeType": "YulAssignment",
                  "src": "2294:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2323:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "2323:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "2304:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "2304:18:2"
                    },
                    "nativeSrc": "2304:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2304:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "2294:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2294:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nativeSrc": "2153:186:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2189:9:2",
                "nodeType": "YulTypedName",
                "src": "2189:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "2200:7:2",
                "nodeType": "YulTypedName",
                "src": "2200:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "2212:6:2",
                "nodeType": "YulTypedName",
                "src": "2212:6:2",
                "type": ""
              }
            ],
            "src": "2153:186:2"
          },
          {
            "body": {
              "nativeSrc": "2514:733:2",
              "nodeType": "YulBlock",
              "src": "2514:733:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "2561:16:2",
                    "nodeType": "YulBlock",
                    "src": "2561:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2570:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2570:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2573:1:2",
                              "nodeType": "YulLiteral",
                              "src": "2573:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2563:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "2563:6:2"
                          },
                          "nativeSrc": "2563:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "2563:12:2"
                        },
                        "nativeSrc": "2563:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "2563:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "2535:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "2535:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "2544:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2544:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "2531:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2531:3:2"
                        },
                        "nativeSrc": "2531:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2531:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2556:3:2",
                        "nodeType": "YulLiteral",
                        "src": "2556:3:2",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "2527:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "2527:3:2"
                    },
                    "nativeSrc": "2527:33:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2527:33:2"
                  },
                  "nativeSrc": "2524:53:2",
                  "nodeType": "YulIf",
                  "src": "2524:53:2"
                },
                {
                  "nativeSrc": "2586:39:2",
                  "nodeType": "YulAssignment",
                  "src": "2586:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2615:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "2615:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "2596:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "2596:18:2"
                    },
                    "nativeSrc": "2596:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2596:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "2586:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2586:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2634:48:2",
                  "nodeType": "YulAssignment",
                  "src": "2634:48:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2667:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2667:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2678:2:2",
                            "nodeType": "YulLiteral",
                            "src": "2678:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2663:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2663:3:2"
                        },
                        "nativeSrc": "2663:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2663:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "2644:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "2644:18:2"
                    },
                    "nativeSrc": "2644:38:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2644:38:2"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "2634:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2634:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2691:14:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2691:14:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "2704:1:2",
                    "nodeType": "YulLiteral",
                    "src": "2704:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "2695:5:2",
                      "nodeType": "YulTypedName",
                      "src": "2695:5:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "2714:41:2",
                  "nodeType": "YulAssignment",
                  "src": "2714:41:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2740:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2740:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2751:2:2",
                            "nodeType": "YulLiteral",
                            "src": "2751:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2736:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2736:3:2"
                        },
                        "nativeSrc": "2736:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2736:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2723:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "2723:12:2"
                    },
                    "nativeSrc": "2723:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2723:32:2"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "2714:5:2",
                      "nodeType": "YulIdentifier",
                      "src": "2714:5:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2764:15:2",
                  "nodeType": "YulAssignment",
                  "src": "2764:15:2",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2774:5:2",
                    "nodeType": "YulIdentifier",
                    "src": "2774:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nativeSrc": "2764:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2764:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2788:16:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2788:16:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "2803:1:2",
                    "nodeType": "YulLiteral",
                    "src": "2803:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nativeSrc": "2792:7:2",
                      "nodeType": "YulTypedName",
                      "src": "2792:7:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "2813:43:2",
                  "nodeType": "YulAssignment",
                  "src": "2813:43:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2841:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2841:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2852:2:2",
                            "nodeType": "YulLiteral",
                            "src": "2852:2:2",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2837:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2837:3:2"
                        },
                        "nativeSrc": "2837:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2837:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2824:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "2824:12:2"
                    },
                    "nativeSrc": "2824:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2824:32:2"
                  },
                  "variableNames": [
                    {
                      "name": "value_1",
                      "nativeSrc": "2813:7:2",
                      "nodeType": "YulIdentifier",
                      "src": "2813:7:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2865:17:2",
                  "nodeType": "YulAssignment",
                  "src": "2865:17:2",
                  "value": {
                    "name": "value_1",
                    "nativeSrc": "2875:7:2",
                    "nodeType": "YulIdentifier",
                    "src": "2875:7:2"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nativeSrc": "2865:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2865:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "2891:48:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2891:48:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2923:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "2923:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2934:3:2",
                            "nodeType": "YulLiteral",
                            "src": "2934:3:2",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2919:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "2919:3:2"
                        },
                        "nativeSrc": "2919:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2919:19:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2906:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "2906:12:2"
                    },
                    "nativeSrc": "2906:33:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2906:33:2"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nativeSrc": "2895:7:2",
                      "nodeType": "YulTypedName",
                      "src": "2895:7:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2991:16:2",
                    "nodeType": "YulBlock",
                    "src": "2991:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3000:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3000:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3003:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3003:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2993:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "2993:6:2"
                          },
                          "nativeSrc": "2993:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "2993:12:2"
                        },
                        "nativeSrc": "2993:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "2993:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_2",
                            "nativeSrc": "2961:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "2961:7:2"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value_2",
                                "nativeSrc": "2974:7:2",
                                "nodeType": "YulIdentifier",
                                "src": "2974:7:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "2983:4:2",
                                "nodeType": "YulLiteral",
                                "src": "2983:4:2",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "2970:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "2970:3:2"
                            },
                            "nativeSrc": "2970:18:2",
                            "nodeType": "YulFunctionCall",
                            "src": "2970:18:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "2958:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "2958:2:2"
                        },
                        "nativeSrc": "2958:31:2",
                        "nodeType": "YulFunctionCall",
                        "src": "2958:31:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "2951:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "2951:6:2"
                    },
                    "nativeSrc": "2951:39:2",
                    "nodeType": "YulFunctionCall",
                    "src": "2951:39:2"
                  },
                  "nativeSrc": "2948:59:2",
                  "nodeType": "YulIf",
                  "src": "2948:59:2"
                },
                {
                  "nativeSrc": "3016:17:2",
                  "nodeType": "YulAssignment",
                  "src": "3016:17:2",
                  "value": {
                    "name": "value_2",
                    "nativeSrc": "3026:7:2",
                    "nodeType": "YulIdentifier",
                    "src": "3026:7:2"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nativeSrc": "3016:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3016:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3042:16:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3042:16:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3057:1:2",
                    "nodeType": "YulLiteral",
                    "src": "3057:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value_3",
                      "nativeSrc": "3046:7:2",
                      "nodeType": "YulTypedName",
                      "src": "3046:7:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "3067:44:2",
                  "nodeType": "YulAssignment",
                  "src": "3067:44:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3095:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3095:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3106:3:2",
                            "nodeType": "YulLiteral",
                            "src": "3106:3:2",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3091:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3091:3:2"
                        },
                        "nativeSrc": "3091:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3091:19:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "3078:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "3078:12:2"
                    },
                    "nativeSrc": "3078:33:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3078:33:2"
                  },
                  "variableNames": [
                    {
                      "name": "value_3",
                      "nativeSrc": "3067:7:2",
                      "nodeType": "YulIdentifier",
                      "src": "3067:7:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3120:17:2",
                  "nodeType": "YulAssignment",
                  "src": "3120:17:2",
                  "value": {
                    "name": "value_3",
                    "nativeSrc": "3130:7:2",
                    "nodeType": "YulIdentifier",
                    "src": "3130:7:2"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nativeSrc": "3120:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3120:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3146:16:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3146:16:2",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3161:1:2",
                    "nodeType": "YulLiteral",
                    "src": "3161:1:2",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value_4",
                      "nativeSrc": "3150:7:2",
                      "nodeType": "YulTypedName",
                      "src": "3150:7:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "3171:44:2",
                  "nodeType": "YulAssignment",
                  "src": "3171:44:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3199:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3199:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3210:3:2",
                            "nodeType": "YulLiteral",
                            "src": "3210:3:2",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3195:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3195:3:2"
                        },
                        "nativeSrc": "3195:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3195:19:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "3182:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "3182:12:2"
                    },
                    "nativeSrc": "3182:33:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3182:33:2"
                  },
                  "variableNames": [
                    {
                      "name": "value_4",
                      "nativeSrc": "3171:7:2",
                      "nodeType": "YulIdentifier",
                      "src": "3171:7:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3224:17:2",
                  "nodeType": "YulAssignment",
                  "src": "3224:17:2",
                  "value": {
                    "name": "value_4",
                    "nativeSrc": "3234:7:2",
                    "nodeType": "YulIdentifier",
                    "src": "3234:7:2"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nativeSrc": "3224:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3224:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32",
            "nativeSrc": "2344:903:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2432:9:2",
                "nodeType": "YulTypedName",
                "src": "2432:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "2443:7:2",
                "nodeType": "YulTypedName",
                "src": "2443:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "2455:6:2",
                "nodeType": "YulTypedName",
                "src": "2455:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "2463:6:2",
                "nodeType": "YulTypedName",
                "src": "2463:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "2471:6:2",
                "nodeType": "YulTypedName",
                "src": "2471:6:2",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "2479:6:2",
                "nodeType": "YulTypedName",
                "src": "2479:6:2",
                "type": ""
              },
              {
                "name": "value4",
                "nativeSrc": "2487:6:2",
                "nodeType": "YulTypedName",
                "src": "2487:6:2",
                "type": ""
              },
              {
                "name": "value5",
                "nativeSrc": "2495:6:2",
                "nodeType": "YulTypedName",
                "src": "2495:6:2",
                "type": ""
              },
              {
                "name": "value6",
                "nativeSrc": "2503:6:2",
                "nodeType": "YulTypedName",
                "src": "2503:6:2",
                "type": ""
              }
            ],
            "src": "2344:903:2"
          },
          {
            "body": {
              "nativeSrc": "3339:173:2",
              "nodeType": "YulBlock",
              "src": "3339:173:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "3385:16:2",
                    "nodeType": "YulBlock",
                    "src": "3385:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3394:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3394:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3397:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3397:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3387:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "3387:6:2"
                          },
                          "nativeSrc": "3387:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "3387:12:2"
                        },
                        "nativeSrc": "3387:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "3387:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "3360:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "3360:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "3369:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3369:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "3356:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3356:3:2"
                        },
                        "nativeSrc": "3356:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3356:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3381:2:2",
                        "nodeType": "YulLiteral",
                        "src": "3381:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "3352:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "3352:3:2"
                    },
                    "nativeSrc": "3352:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3352:32:2"
                  },
                  "nativeSrc": "3349:52:2",
                  "nodeType": "YulIf",
                  "src": "3349:52:2"
                },
                {
                  "nativeSrc": "3410:39:2",
                  "nodeType": "YulAssignment",
                  "src": "3410:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3439:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "3439:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "3420:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "3420:18:2"
                    },
                    "nativeSrc": "3420:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3420:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "3410:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3410:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3458:48:2",
                  "nodeType": "YulAssignment",
                  "src": "3458:48:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3491:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3491:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3502:2:2",
                            "nodeType": "YulLiteral",
                            "src": "3502:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3487:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3487:3:2"
                        },
                        "nativeSrc": "3487:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3487:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "3468:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "3468:18:2"
                    },
                    "nativeSrc": "3468:38:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3468:38:2"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "3458:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3458:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nativeSrc": "3252:260:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3297:9:2",
                "nodeType": "YulTypedName",
                "src": "3297:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "3308:7:2",
                "nodeType": "YulTypedName",
                "src": "3308:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "3320:6:2",
                "nodeType": "YulTypedName",
                "src": "3320:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "3328:6:2",
                "nodeType": "YulTypedName",
                "src": "3328:6:2",
                "type": ""
              }
            ],
            "src": "3252:260:2"
          },
          {
            "body": {
              "nativeSrc": "3601:263:2",
              "nodeType": "YulBlock",
              "src": "3601:263:2",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "3647:16:2",
                    "nodeType": "YulBlock",
                    "src": "3647:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3656:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3656:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3659:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3659:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3649:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "3649:6:2"
                          },
                          "nativeSrc": "3649:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "3649:12:2"
                        },
                        "nativeSrc": "3649:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "3649:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "3622:7:2",
                            "nodeType": "YulIdentifier",
                            "src": "3622:7:2"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "3631:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3631:9:2"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "3618:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3618:3:2"
                        },
                        "nativeSrc": "3618:23:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3618:23:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3643:2:2",
                        "nodeType": "YulLiteral",
                        "src": "3643:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "3614:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "3614:3:2"
                    },
                    "nativeSrc": "3614:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3614:32:2"
                  },
                  "nativeSrc": "3611:52:2",
                  "nodeType": "YulIf",
                  "src": "3611:52:2"
                },
                {
                  "nativeSrc": "3672:39:2",
                  "nodeType": "YulAssignment",
                  "src": "3672:39:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3701:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "3701:9:2"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nativeSrc": "3682:18:2",
                      "nodeType": "YulIdentifier",
                      "src": "3682:18:2"
                    },
                    "nativeSrc": "3682:29:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3682:29:2"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "3672:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3672:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3720:45:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3720:45:2",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3750:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "3750:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3761:2:2",
                            "nodeType": "YulLiteral",
                            "src": "3761:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3746:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "3746:3:2"
                        },
                        "nativeSrc": "3746:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3746:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "3733:12:2",
                      "nodeType": "YulIdentifier",
                      "src": "3733:12:2"
                    },
                    "nativeSrc": "3733:32:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3733:32:2"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "3724:5:2",
                      "nodeType": "YulTypedName",
                      "src": "3724:5:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3818:16:2",
                    "nodeType": "YulBlock",
                    "src": "3818:16:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3827:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3827:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3830:1:2",
                              "nodeType": "YulLiteral",
                              "src": "3830:1:2",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3820:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "3820:6:2"
                          },
                          "nativeSrc": "3820:12:2",
                          "nodeType": "YulFunctionCall",
                          "src": "3820:12:2"
                        },
                        "nativeSrc": "3820:12:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "3820:12:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "3787:5:2",
                            "nodeType": "YulIdentifier",
                            "src": "3787:5:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "3808:5:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3808:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "3801:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3801:6:2"
                                },
                                "nativeSrc": "3801:13:2",
                                "nodeType": "YulFunctionCall",
                                "src": "3801:13:2"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "3794:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "3794:6:2"
                            },
                            "nativeSrc": "3794:21:2",
                            "nodeType": "YulFunctionCall",
                            "src": "3794:21:2"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "3784:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "3784:2:2"
                        },
                        "nativeSrc": "3784:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "3784:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "3777:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3777:6:2"
                    },
                    "nativeSrc": "3777:40:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3777:40:2"
                  },
                  "nativeSrc": "3774:60:2",
                  "nodeType": "YulIf",
                  "src": "3774:60:2"
                },
                {
                  "nativeSrc": "3843:15:2",
                  "nodeType": "YulAssignment",
                  "src": "3843:15:2",
                  "value": {
                    "name": "value",
                    "nativeSrc": "3853:5:2",
                    "nodeType": "YulIdentifier",
                    "src": "3853:5:2"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "3843:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3843:6:2"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bool",
            "nativeSrc": "3517:347:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3559:9:2",
                "nodeType": "YulTypedName",
                "src": "3559:9:2",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "3570:7:2",
                "nodeType": "YulTypedName",
                "src": "3570:7:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "3582:6:2",
                "nodeType": "YulTypedName",
                "src": "3582:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "3590:6:2",
                "nodeType": "YulTypedName",
                "src": "3590:6:2",
                "type": ""
              }
            ],
            "src": "3517:347:2"
          },
          {
            "body": {
              "nativeSrc": "3924:325:2",
              "nodeType": "YulBlock",
              "src": "3924:325:2",
              "statements": [
                {
                  "nativeSrc": "3934:22:2",
                  "nodeType": "YulAssignment",
                  "src": "3934:22:2",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "3948:1:2",
                        "nodeType": "YulLiteral",
                        "src": "3948:1:2",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nativeSrc": "3951:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "3951:4:2"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nativeSrc": "3944:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "3944:3:2"
                    },
                    "nativeSrc": "3944:12:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3944:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nativeSrc": "3934:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "3934:6:2"
                    }
                  ]
                },
                {
                  "nativeSrc": "3965:38:2",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3965:38:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nativeSrc": "3995:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "3995:4:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4001:1:2",
                        "nodeType": "YulLiteral",
                        "src": "4001:1:2",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nativeSrc": "3991:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "3991:3:2"
                    },
                    "nativeSrc": "3991:12:2",
                    "nodeType": "YulFunctionCall",
                    "src": "3991:12:2"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nativeSrc": "3969:18:2",
                      "nodeType": "YulTypedName",
                      "src": "3969:18:2",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "4042:31:2",
                    "nodeType": "YulBlock",
                    "src": "4042:31:2",
                    "statements": [
                      {
                        "nativeSrc": "4044:27:2",
                        "nodeType": "YulAssignment",
                        "src": "4044:27:2",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nativeSrc": "4058:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "4058:6:2"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4066:4:2",
                              "nodeType": "YulLiteral",
                              "src": "4066:4:2",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nativeSrc": "4054:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "4054:3:2"
                          },
                          "nativeSrc": "4054:17:2",
                          "nodeType": "YulFunctionCall",
                          "src": "4054:17:2"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nativeSrc": "4044:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4044:6:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nativeSrc": "4022:18:2",
                        "nodeType": "YulIdentifier",
                        "src": "4022:18:2"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "4015:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4015:6:2"
                    },
                    "nativeSrc": "4015:26:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4015:26:2"
                  },
                  "nativeSrc": "4012:61:2",
                  "nodeType": "YulIf",
                  "src": "4012:61:2"
                },
                {
                  "body": {
                    "nativeSrc": "4132:111:2",
                    "nodeType": "YulBlock",
                    "src": "4132:111:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4153:1:2",
                              "nodeType": "YulLiteral",
                              "src": "4153:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "4160:3:2",
                                  "nodeType": "YulLiteral",
                                  "src": "4160:3:2",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "4165:10:2",
                                  "nodeType": "YulLiteral",
                                  "src": "4165:10:2",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nativeSrc": "4156:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "4156:3:2"
                              },
                              "nativeSrc": "4156:20:2",
                              "nodeType": "YulFunctionCall",
                              "src": "4156:20:2"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4146:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4146:6:2"
                          },
                          "nativeSrc": "4146:31:2",
                          "nodeType": "YulFunctionCall",
                          "src": "4146:31:2"
                        },
                        "nativeSrc": "4146:31:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "4146:31:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4197:1:2",
                              "nodeType": "YulLiteral",
                              "src": "4197:1:2",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4200:4:2",
                              "nodeType": "YulLiteral",
                              "src": "4200:4:2",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4190:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4190:6:2"
                          },
                          "nativeSrc": "4190:15:2",
                          "nodeType": "YulFunctionCall",
                          "src": "4190:15:2"
                        },
                        "nativeSrc": "4190:15:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "4190:15:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4225:1:2",
                              "nodeType": "YulLiteral",
                              "src": "4225:1:2",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4228:4:2",
                              "nodeType": "YulLiteral",
                              "src": "4228:4:2",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "4218:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4218:6:2"
                          },
                          "nativeSrc": "4218:15:2",
                          "nodeType": "YulFunctionCall",
                          "src": "4218:15:2"
                        },
                        "nativeSrc": "4218:15:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "4218:15:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nativeSrc": "4088:18:2",
                        "nodeType": "YulIdentifier",
                        "src": "4088:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nativeSrc": "4111:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4111:6:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4119:2:2",
                            "nodeType": "YulLiteral",
                            "src": "4119:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "4108:2:2",
                          "nodeType": "YulIdentifier",
                          "src": "4108:2:2"
                        },
                        "nativeSrc": "4108:14:2",
                        "nodeType": "YulFunctionCall",
                        "src": "4108:14:2"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nativeSrc": "4085:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "4085:2:2"
                    },
                    "nativeSrc": "4085:38:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4085:38:2"
                  },
                  "nativeSrc": "4082:161:2",
                  "nodeType": "YulIf",
                  "src": "4082:161:2"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nativeSrc": "3869:380:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nativeSrc": "3904:4:2",
                "nodeType": "YulTypedName",
                "src": "3904:4:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nativeSrc": "3913:6:2",
                "nodeType": "YulTypedName",
                "src": "3913:6:2",
                "type": ""
              }
            ],
            "src": "3869:380:2"
          },
          {
            "body": {
              "nativeSrc": "4286:95:2",
              "nodeType": "YulBlock",
              "src": "4286:95:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "4303:1:2",
                        "nodeType": "YulLiteral",
                        "src": "4303:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "4310:3:2",
                            "nodeType": "YulLiteral",
                            "src": "4310:3:2",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4315:10:2",
                            "nodeType": "YulLiteral",
                            "src": "4315:10:2",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "4306:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "4306:3:2"
                        },
                        "nativeSrc": "4306:20:2",
                        "nodeType": "YulFunctionCall",
                        "src": "4306:20:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4296:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4296:6:2"
                    },
                    "nativeSrc": "4296:31:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4296:31:2"
                  },
                  "nativeSrc": "4296:31:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "4296:31:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "4343:1:2",
                        "nodeType": "YulLiteral",
                        "src": "4343:1:2",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4346:4:2",
                        "nodeType": "YulLiteral",
                        "src": "4346:4:2",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4336:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4336:6:2"
                    },
                    "nativeSrc": "4336:15:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4336:15:2"
                  },
                  "nativeSrc": "4336:15:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "4336:15:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "4367:1:2",
                        "nodeType": "YulLiteral",
                        "src": "4367:1:2",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4370:4:2",
                        "nodeType": "YulLiteral",
                        "src": "4370:4:2",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "4360:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4360:6:2"
                    },
                    "nativeSrc": "4360:15:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4360:15:2"
                  },
                  "nativeSrc": "4360:15:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "4360:15:2"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nativeSrc": "4254:127:2",
            "nodeType": "YulFunctionDefinition",
            "src": "4254:127:2"
          },
          {
            "body": {
              "nativeSrc": "4435:79:2",
              "nodeType": "YulBlock",
              "src": "4435:79:2",
              "statements": [
                {
                  "nativeSrc": "4445:17:2",
                  "nodeType": "YulAssignment",
                  "src": "4445:17:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nativeSrc": "4457:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "4457:1:2"
                      },
                      {
                        "name": "y",
                        "nativeSrc": "4460:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "4460:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nativeSrc": "4453:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "4453:3:2"
                    },
                    "nativeSrc": "4453:9:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4453:9:2"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nativeSrc": "4445:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "4445:4:2"
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "4486:22:2",
                    "nodeType": "YulBlock",
                    "src": "4486:22:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nativeSrc": "4488:16:2",
                            "nodeType": "YulIdentifier",
                            "src": "4488:16:2"
                          },
                          "nativeSrc": "4488:18:2",
                          "nodeType": "YulFunctionCall",
                          "src": "4488:18:2"
                        },
                        "nativeSrc": "4488:18:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "4488:18:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nativeSrc": "4477:4:2",
                        "nodeType": "YulIdentifier",
                        "src": "4477:4:2"
                      },
                      {
                        "name": "x",
                        "nativeSrc": "4483:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "4483:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "4474:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "4474:2:2"
                    },
                    "nativeSrc": "4474:11:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4474:11:2"
                  },
                  "nativeSrc": "4471:37:2",
                  "nodeType": "YulIf",
                  "src": "4471:37:2"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nativeSrc": "4386:128:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nativeSrc": "4417:1:2",
                "nodeType": "YulTypedName",
                "src": "4417:1:2",
                "type": ""
              },
              {
                "name": "y",
                "nativeSrc": "4420:1:2",
                "nodeType": "YulTypedName",
                "src": "4420:1:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nativeSrc": "4426:4:2",
                "nodeType": "YulTypedName",
                "src": "4426:4:2",
                "type": ""
              }
            ],
            "src": "4386:128:2"
          },
          {
            "body": {
              "nativeSrc": "4648:145:2",
              "nodeType": "YulBlock",
              "src": "4648:145:2",
              "statements": [
                {
                  "nativeSrc": "4658:26:2",
                  "nodeType": "YulAssignment",
                  "src": "4658:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4670:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "4670:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4681:2:2",
                        "nodeType": "YulLiteral",
                        "src": "4681:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4666:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "4666:3:2"
                    },
                    "nativeSrc": "4666:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4666:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4658:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "4658:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4700:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "4700:9:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "4715:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "4715:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4731:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "4731:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4736:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "4736:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "4727:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4727:3:2"
                                },
                                "nativeSrc": "4727:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "4727:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "4740:1:2",
                                "nodeType": "YulLiteral",
                                "src": "4740:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "4723:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "4723:3:2"
                            },
                            "nativeSrc": "4723:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "4723:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4711:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "4711:3:2"
                        },
                        "nativeSrc": "4711:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "4711:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4693:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4693:6:2"
                    },
                    "nativeSrc": "4693:51:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4693:51:2"
                  },
                  "nativeSrc": "4693:51:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "4693:51:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4764:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "4764:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4775:2:2",
                            "nodeType": "YulLiteral",
                            "src": "4775:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4760:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "4760:3:2"
                        },
                        "nativeSrc": "4760:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "4760:18:2"
                      },
                      {
                        "name": "value1",
                        "nativeSrc": "4780:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "4780:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4753:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "4753:6:2"
                    },
                    "nativeSrc": "4753:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "4753:34:2"
                  },
                  "nativeSrc": "4753:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "4753:34:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nativeSrc": "4519:274:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4609:9:2",
                "nodeType": "YulTypedName",
                "src": "4609:9:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "4620:6:2",
                "nodeType": "YulTypedName",
                "src": "4620:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4628:6:2",
                "nodeType": "YulTypedName",
                "src": "4628:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "4639:4:2",
                "nodeType": "YulTypedName",
                "src": "4639:4:2",
                "type": ""
              }
            ],
            "src": "4519:274:2"
          },
          {
            "body": {
              "nativeSrc": "5039:346:2",
              "nodeType": "YulBlock",
              "src": "5039:346:2",
              "statements": [
                {
                  "nativeSrc": "5049:27:2",
                  "nodeType": "YulAssignment",
                  "src": "5049:27:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5061:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5061:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5072:3:2",
                        "nodeType": "YulLiteral",
                        "src": "5072:3:2",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5057:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "5057:3:2"
                    },
                    "nativeSrc": "5057:19:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5057:19:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5049:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "5049:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5092:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5092:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "5103:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5103:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5085:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5085:6:2"
                    },
                    "nativeSrc": "5085:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5085:25:2"
                  },
                  "nativeSrc": "5085:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5085:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5130:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5130:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5141:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5141:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5126:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5126:3:2"
                        },
                        "nativeSrc": "5126:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5126:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nativeSrc": "5150:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "5150:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5166:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "5166:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5171:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "5171:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "5162:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5162:3:2"
                                },
                                "nativeSrc": "5162:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "5162:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "5175:1:2",
                                "nodeType": "YulLiteral",
                                "src": "5175:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "5158:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "5158:3:2"
                            },
                            "nativeSrc": "5158:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "5158:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "5146:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5146:3:2"
                        },
                        "nativeSrc": "5146:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5146:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5119:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5119:6:2"
                    },
                    "nativeSrc": "5119:60:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5119:60:2"
                  },
                  "nativeSrc": "5119:60:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5119:60:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5199:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5199:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5210:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5210:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5195:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5195:3:2"
                        },
                        "nativeSrc": "5195:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5195:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nativeSrc": "5219:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "5219:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5235:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "5235:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5240:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "5240:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "5231:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5231:3:2"
                                },
                                "nativeSrc": "5231:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "5231:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "5244:1:2",
                                "nodeType": "YulLiteral",
                                "src": "5244:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "5227:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "5227:3:2"
                            },
                            "nativeSrc": "5227:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "5227:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "5215:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5215:3:2"
                        },
                        "nativeSrc": "5215:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5215:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5188:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5188:6:2"
                    },
                    "nativeSrc": "5188:60:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5188:60:2"
                  },
                  "nativeSrc": "5188:60:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5188:60:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5268:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5268:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5279:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5279:2:2",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5264:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5264:3:2"
                        },
                        "nativeSrc": "5264:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5264:18:2"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "5284:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5284:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5257:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5257:6:2"
                    },
                    "nativeSrc": "5257:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5257:34:2"
                  },
                  "nativeSrc": "5257:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5257:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5311:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5311:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5322:3:2",
                            "nodeType": "YulLiteral",
                            "src": "5322:3:2",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5307:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5307:3:2"
                        },
                        "nativeSrc": "5307:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5307:19:2"
                      },
                      {
                        "name": "value4",
                        "nativeSrc": "5328:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5328:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5300:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5300:6:2"
                    },
                    "nativeSrc": "5300:35:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5300:35:2"
                  },
                  "nativeSrc": "5300:35:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5300:35:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5355:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5355:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5366:3:2",
                            "nodeType": "YulLiteral",
                            "src": "5366:3:2",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5351:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5351:3:2"
                        },
                        "nativeSrc": "5351:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5351:19:2"
                      },
                      {
                        "name": "value5",
                        "nativeSrc": "5372:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5372:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5344:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5344:6:2"
                    },
                    "nativeSrc": "5344:35:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5344:35:2"
                  },
                  "nativeSrc": "5344:35:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5344:35:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed",
            "nativeSrc": "4798:587:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4968:9:2",
                "nodeType": "YulTypedName",
                "src": "4968:9:2",
                "type": ""
              },
              {
                "name": "value5",
                "nativeSrc": "4979:6:2",
                "nodeType": "YulTypedName",
                "src": "4979:6:2",
                "type": ""
              },
              {
                "name": "value4",
                "nativeSrc": "4987:6:2",
                "nodeType": "YulTypedName",
                "src": "4987:6:2",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "4995:6:2",
                "nodeType": "YulTypedName",
                "src": "4995:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "5003:6:2",
                "nodeType": "YulTypedName",
                "src": "5003:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "5011:6:2",
                "nodeType": "YulTypedName",
                "src": "5011:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5019:6:2",
                "nodeType": "YulTypedName",
                "src": "5019:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5030:4:2",
                "nodeType": "YulTypedName",
                "src": "5030:4:2",
                "type": ""
              }
            ],
            "src": "4798:587:2"
          },
          {
            "body": {
              "nativeSrc": "5571:217:2",
              "nodeType": "YulBlock",
              "src": "5571:217:2",
              "statements": [
                {
                  "nativeSrc": "5581:27:2",
                  "nodeType": "YulAssignment",
                  "src": "5581:27:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5593:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5593:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5604:3:2",
                        "nodeType": "YulLiteral",
                        "src": "5604:3:2",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5589:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "5589:3:2"
                    },
                    "nativeSrc": "5589:19:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5589:19:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5581:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "5581:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5624:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5624:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "5635:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5635:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5617:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5617:6:2"
                    },
                    "nativeSrc": "5617:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5617:25:2"
                  },
                  "nativeSrc": "5617:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5617:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5662:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5662:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5673:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5673:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5658:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5658:3:2"
                        },
                        "nativeSrc": "5658:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5658:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nativeSrc": "5682:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "5682:6:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5690:4:2",
                            "nodeType": "YulLiteral",
                            "src": "5690:4:2",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "5678:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5678:3:2"
                        },
                        "nativeSrc": "5678:17:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5678:17:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5651:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5651:6:2"
                    },
                    "nativeSrc": "5651:45:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5651:45:2"
                  },
                  "nativeSrc": "5651:45:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5651:45:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5716:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5716:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5727:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5727:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5712:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5712:3:2"
                        },
                        "nativeSrc": "5712:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5712:18:2"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "5732:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5732:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5705:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5705:6:2"
                    },
                    "nativeSrc": "5705:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5705:34:2"
                  },
                  "nativeSrc": "5705:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5705:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5759:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "5759:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5770:2:2",
                            "nodeType": "YulLiteral",
                            "src": "5770:2:2",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5755:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5755:3:2"
                        },
                        "nativeSrc": "5755:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5755:18:2"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "5775:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "5775:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5748:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5748:6:2"
                    },
                    "nativeSrc": "5748:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5748:34:2"
                  },
                  "nativeSrc": "5748:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5748:34:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
            "nativeSrc": "5390:398:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5516:9:2",
                "nodeType": "YulTypedName",
                "src": "5516:9:2",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "5527:6:2",
                "nodeType": "YulTypedName",
                "src": "5527:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "5535:6:2",
                "nodeType": "YulTypedName",
                "src": "5535:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "5543:6:2",
                "nodeType": "YulTypedName",
                "src": "5543:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5551:6:2",
                "nodeType": "YulTypedName",
                "src": "5551:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5562:4:2",
                "nodeType": "YulTypedName",
                "src": "5562:4:2",
                "type": ""
              }
            ],
            "src": "5390:398:2"
          },
          {
            "body": {
              "nativeSrc": "5916:161:2",
              "nodeType": "YulBlock",
              "src": "5916:161:2",
              "statements": [
                {
                  "nativeSrc": "5926:26:2",
                  "nodeType": "YulAssignment",
                  "src": "5926:26:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5938:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5938:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5949:2:2",
                        "nodeType": "YulLiteral",
                        "src": "5949:2:2",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5934:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "5934:3:2"
                    },
                    "nativeSrc": "5934:18:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5934:18:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5926:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "5926:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5968:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "5968:9:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "5983:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "5983:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5999:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "5999:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "6004:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "6004:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "5995:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5995:3:2"
                                },
                                "nativeSrc": "5995:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "5995:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "6008:1:2",
                                "nodeType": "YulLiteral",
                                "src": "6008:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "5991:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "5991:3:2"
                            },
                            "nativeSrc": "5991:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "5991:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "5979:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "5979:3:2"
                        },
                        "nativeSrc": "5979:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "5979:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5961:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "5961:6:2"
                    },
                    "nativeSrc": "5961:51:2",
                    "nodeType": "YulFunctionCall",
                    "src": "5961:51:2"
                  },
                  "nativeSrc": "5961:51:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "5961:51:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6032:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "6032:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6043:2:2",
                            "nodeType": "YulLiteral",
                            "src": "6043:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6028:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6028:3:2"
                        },
                        "nativeSrc": "6028:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6028:18:2"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nativeSrc": "6062:6:2",
                                "nodeType": "YulIdentifier",
                                "src": "6062:6:2"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "6055:6:2",
                              "nodeType": "YulIdentifier",
                              "src": "6055:6:2"
                            },
                            "nativeSrc": "6055:14:2",
                            "nodeType": "YulFunctionCall",
                            "src": "6055:14:2"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nativeSrc": "6048:6:2",
                          "nodeType": "YulIdentifier",
                          "src": "6048:6:2"
                        },
                        "nativeSrc": "6048:22:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6048:22:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6021:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6021:6:2"
                    },
                    "nativeSrc": "6021:50:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6021:50:2"
                  },
                  "nativeSrc": "6021:50:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6021:50:2"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed",
            "nativeSrc": "5793:284:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5877:9:2",
                "nodeType": "YulTypedName",
                "src": "5877:9:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "5888:6:2",
                "nodeType": "YulTypedName",
                "src": "5888:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5896:6:2",
                "nodeType": "YulTypedName",
                "src": "5896:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5907:4:2",
                "nodeType": "YulTypedName",
                "src": "5907:4:2",
                "type": ""
              }
            ],
            "src": "5793:284:2"
          },
          {
            "body": {
              "nativeSrc": "6130:77:2",
              "nodeType": "YulBlock",
              "src": "6130:77:2",
              "statements": [
                {
                  "nativeSrc": "6140:16:2",
                  "nodeType": "YulAssignment",
                  "src": "6140:16:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nativeSrc": "6151:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "6151:1:2"
                      },
                      {
                        "name": "y",
                        "nativeSrc": "6154:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "6154:1:2"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6147:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "6147:3:2"
                    },
                    "nativeSrc": "6147:9:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6147:9:2"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nativeSrc": "6140:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "6140:3:2"
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "6179:22:2",
                    "nodeType": "YulBlock",
                    "src": "6179:22:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nativeSrc": "6181:16:2",
                            "nodeType": "YulIdentifier",
                            "src": "6181:16:2"
                          },
                          "nativeSrc": "6181:18:2",
                          "nodeType": "YulFunctionCall",
                          "src": "6181:18:2"
                        },
                        "nativeSrc": "6181:18:2",
                        "nodeType": "YulExpressionStatement",
                        "src": "6181:18:2"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nativeSrc": "6171:1:2",
                        "nodeType": "YulIdentifier",
                        "src": "6171:1:2"
                      },
                      {
                        "name": "sum",
                        "nativeSrc": "6174:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "6174:3:2"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "6168:2:2",
                      "nodeType": "YulIdentifier",
                      "src": "6168:2:2"
                    },
                    "nativeSrc": "6168:10:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6168:10:2"
                  },
                  "nativeSrc": "6165:36:2",
                  "nodeType": "YulIf",
                  "src": "6165:36:2"
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nativeSrc": "6082:125:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nativeSrc": "6113:1:2",
                "nodeType": "YulTypedName",
                "src": "6113:1:2",
                "type": ""
              },
              {
                "name": "y",
                "nativeSrc": "6116:1:2",
                "nodeType": "YulTypedName",
                "src": "6116:1:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nativeSrc": "6122:3:2",
                "nodeType": "YulTypedName",
                "src": "6122:3:2",
                "type": ""
              }
            ],
            "src": "6082:125:2"
          },
          {
            "body": {
              "nativeSrc": "6460:144:2",
              "nodeType": "YulBlock",
              "src": "6460:144:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "6477:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "6477:3:2"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "6486:3:2",
                            "nodeType": "YulLiteral",
                            "src": "6486:3:2",
                            "type": "",
                            "value": "240"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6491:4:2",
                            "nodeType": "YulLiteral",
                            "src": "6491:4:2",
                            "type": "",
                            "value": "6401"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "6482:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6482:3:2"
                        },
                        "nativeSrc": "6482:14:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6482:14:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6470:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6470:6:2"
                    },
                    "nativeSrc": "6470:27:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6470:27:2"
                  },
                  "nativeSrc": "6470:27:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6470:27:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "6517:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "6517:3:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6522:1:2",
                            "nodeType": "YulLiteral",
                            "src": "6522:1:2",
                            "type": "",
                            "value": "2"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6513:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6513:3:2"
                        },
                        "nativeSrc": "6513:11:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6513:11:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "6526:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "6526:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6506:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6506:6:2"
                    },
                    "nativeSrc": "6506:27:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6506:27:2"
                  },
                  "nativeSrc": "6506:27:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6506:27:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "6553:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "6553:3:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6558:2:2",
                            "nodeType": "YulLiteral",
                            "src": "6558:2:2",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6549:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6549:3:2"
                        },
                        "nativeSrc": "6549:12:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6549:12:2"
                      },
                      {
                        "name": "value1",
                        "nativeSrc": "6563:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "6563:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6542:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6542:6:2"
                    },
                    "nativeSrc": "6542:28:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6542:28:2"
                  },
                  "nativeSrc": "6542:28:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6542:28:2"
                },
                {
                  "nativeSrc": "6579:19:2",
                  "nodeType": "YulAssignment",
                  "src": "6579:19:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "6590:3:2",
                        "nodeType": "YulIdentifier",
                        "src": "6590:3:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6595:2:2",
                        "nodeType": "YulLiteral",
                        "src": "6595:2:2",
                        "type": "",
                        "value": "66"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6586:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "6586:3:2"
                    },
                    "nativeSrc": "6586:12:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6586:12:2"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "6579:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "6579:3:2"
                    }
                  ]
                }
              ]
            },
            "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",
            "nativeSrc": "6212:392:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "6428:3:2",
                "nodeType": "YulTypedName",
                "src": "6428:3:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "6433:6:2",
                "nodeType": "YulTypedName",
                "src": "6433:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "6441:6:2",
                "nodeType": "YulTypedName",
                "src": "6441:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "6452:3:2",
                "nodeType": "YulTypedName",
                "src": "6452:3:2",
                "type": ""
              }
            ],
            "src": "6212:392:2"
          },
          {
            "body": {
              "nativeSrc": "6822:276:2",
              "nodeType": "YulBlock",
              "src": "6822:276:2",
              "statements": [
                {
                  "nativeSrc": "6832:27:2",
                  "nodeType": "YulAssignment",
                  "src": "6832:27:2",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6844:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "6844:9:2"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6855:3:2",
                        "nodeType": "YulLiteral",
                        "src": "6855:3:2",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6840:3:2",
                      "nodeType": "YulIdentifier",
                      "src": "6840:3:2"
                    },
                    "nativeSrc": "6840:19:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6840:19:2"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "6832:4:2",
                      "nodeType": "YulIdentifier",
                      "src": "6832:4:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6875:9:2",
                        "nodeType": "YulIdentifier",
                        "src": "6875:9:2"
                      },
                      {
                        "name": "value0",
                        "nativeSrc": "6886:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "6886:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6868:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6868:6:2"
                    },
                    "nativeSrc": "6868:25:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6868:25:2"
                  },
                  "nativeSrc": "6868:25:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6868:25:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6913:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "6913:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6924:2:2",
                            "nodeType": "YulLiteral",
                            "src": "6924:2:2",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6909:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6909:3:2"
                        },
                        "nativeSrc": "6909:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6909:18:2"
                      },
                      {
                        "name": "value1",
                        "nativeSrc": "6929:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "6929:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6902:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6902:6:2"
                    },
                    "nativeSrc": "6902:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6902:34:2"
                  },
                  "nativeSrc": "6902:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6902:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6956:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "6956:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6967:2:2",
                            "nodeType": "YulLiteral",
                            "src": "6967:2:2",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6952:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6952:3:2"
                        },
                        "nativeSrc": "6952:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6952:18:2"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "6972:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "6972:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6945:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6945:6:2"
                    },
                    "nativeSrc": "6945:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6945:34:2"
                  },
                  "nativeSrc": "6945:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6945:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6999:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "6999:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7010:2:2",
                            "nodeType": "YulLiteral",
                            "src": "7010:2:2",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6995:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "6995:3:2"
                        },
                        "nativeSrc": "6995:18:2",
                        "nodeType": "YulFunctionCall",
                        "src": "6995:18:2"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "7015:6:2",
                        "nodeType": "YulIdentifier",
                        "src": "7015:6:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6988:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "6988:6:2"
                    },
                    "nativeSrc": "6988:34:2",
                    "nodeType": "YulFunctionCall",
                    "src": "6988:34:2"
                  },
                  "nativeSrc": "6988:34:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "6988:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "7042:9:2",
                            "nodeType": "YulIdentifier",
                            "src": "7042:9:2"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7053:3:2",
                            "nodeType": "YulLiteral",
                            "src": "7053:3:2",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "7038:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "7038:3:2"
                        },
                        "nativeSrc": "7038:19:2",
                        "nodeType": "YulFunctionCall",
                        "src": "7038:19:2"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nativeSrc": "7063:6:2",
                            "nodeType": "YulIdentifier",
                            "src": "7063:6:2"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "7079:3:2",
                                    "nodeType": "YulLiteral",
                                    "src": "7079:3:2",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "7084:1:2",
                                    "nodeType": "YulLiteral",
                                    "src": "7084:1:2",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "7075:3:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7075:3:2"
                                },
                                "nativeSrc": "7075:11:2",
                                "nodeType": "YulFunctionCall",
                                "src": "7075:11:2"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "7088:1:2",
                                "nodeType": "YulLiteral",
                                "src": "7088:1:2",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "7071:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "7071:3:2"
                            },
                            "nativeSrc": "7071:19:2",
                            "nodeType": "YulFunctionCall",
                            "src": "7071:19:2"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "7059:3:2",
                          "nodeType": "YulIdentifier",
                          "src": "7059:3:2"
                        },
                        "nativeSrc": "7059:32:2",
                        "nodeType": "YulFunctionCall",
                        "src": "7059:32:2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "7031:6:2",
                      "nodeType": "YulIdentifier",
                      "src": "7031:6:2"
                    },
                    "nativeSrc": "7031:61:2",
                    "nodeType": "YulFunctionCall",
                    "src": "7031:61:2"
                  },
                  "nativeSrc": "7031:61:2",
                  "nodeType": "YulExpressionStatement",
                  "src": "7031:61:2"
                }
              ]
            },
            "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",
            "nativeSrc": "6609:489:2",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "6759:9:2",
                "nodeType": "YulTypedName",
                "src": "6759:9:2",
                "type": ""
              },
              {
                "name": "value4",
                "nativeSrc": "6770:6:2",
                "nodeType": "YulTypedName",
                "src": "6770:6:2",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "6778:6:2",
                "nodeType": "YulTypedName",
                "src": "6778:6:2",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "6786:6:2",
                "nodeType": "YulTypedName",
                "src": "6786:6:2",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "6794:6:2",
                "nodeType": "YulTypedName",
                "src": "6794:6:2",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "6802:6:2",
                "nodeType": "YulTypedName",
                "src": "6802:6:2",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "6813:4:2",
                "nodeType": "YulTypedName",
                "src": "6813:4:2",
                "type": ""
              }
            ],
            "src": "6609:489:2"
          }
        ]
      },
      "contents": "{\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        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\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_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := 0\n        value := calldataload(add(headStart, 32))\n        value1 := value\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_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 abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let value := 0\n        value := calldataload(add(headStart, 64))\n        value2 := value\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\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_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_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let value := 0\n        value := calldataload(add(headStart, 64))\n        value2 := value\n        let value_1 := 0\n        value_1 := calldataload(add(headStart, 96))\n        value3 := value_1\n        let value_2 := calldataload(add(headStart, 128))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        value4 := value_2\n        let value_3 := 0\n        value_3 := calldataload(add(headStart, 160))\n        value5 := value_3\n        let value_4 := 0\n        value_4 := calldataload(add(headStart, 192))\n        value6 := value_4\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_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        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value1 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\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_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__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), value1)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\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 abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__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), iszero(iszero(value1)))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\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 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}",
      "id": 2,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "9000:2857:0:-:0;;;10389:280;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10476:18;;;;;;;;;;;;;-1:-1:-1;;;10476:18:0;;;10509:20;;;;;;;;;;;;;-1:-1:-1;;;10509:20:0;;;10544:21;;;;;;;;;;;;;-1:-1:-1;;;10544:21:0;;;9461:2;6136:5;6143:7;6152:9;1790:5;1783:4;:12;;;;;;:::i;:::-;-1:-1:-1;1806:6:0;:16;1815:7;1806:6;:16;:::i;:::-;-1:-1:-1;1833:20:0;;;;-1:-1:-1;;6193:23:0;;::::1;::::0;;::::1;::::0;;;;6174:16:::1;:42:::0;6251:26;;;;::::1;::::0;6229:19:::1;:48:::0;6315:25:::1;8446:16:::0;;8485:19;;8375:220;;;4637:66;8375:220;;;3209:25:2;3250:18;;;3243:34;;;;3293:18;;;3286:34;8527:13:0;3336:18:2;;;3329:34;8571:4:0;3379:19:2;;;3372:61;8307:7:0;;3181:19:2;;8375:220:0;;;;;;;;;;;;8347:263;;;;;;8327:283;;8241:377;;6315:25:::1;6290:22;:50:::0;-1:-1:-1;;6370:13:0::1;6353:14;:30:::0;-1:-1:-1;;;;;;;10630:24:0::1;-1:-1:-1::0;10630:24:0;;;:8:::1;:24;::::0;;;;:31;;-1:-1:-1;;10630:31:0::1;10657:4;10630:31;::::0;;9000:2857;;14:290:2;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:2;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:2:o;309:127::-;370:10;365:3;361:20;358:1;351:31;401:4;398:1;391:15;425:4;422:1;415:15;441:380;520:1;516:12;;;;563;;;584:61;;638:4;630:6;626:17;616:27;;584:61;691:2;683:6;680:14;660:18;657:38;654:161;;737:10;732:3;728:20;725:1;718:31;772:4;769:1;762:15;800:4;797:1;790:15;654:161;;441:380;;;:::o;952:518::-;1054:2;1049:3;1046:11;1043:421;;;1090:5;1087:1;1080:16;1134:4;1131:1;1121:18;1204:2;1192:10;1188:19;1185:1;1181:27;1175:4;1171:38;1240:4;1228:10;1225:20;1222:47;;;-1:-1:-1;1263:4:2;1222:47;1318:2;1313:3;1309:12;1306:1;1302:20;1296:4;1292:31;1282:41;;1373:81;1391:2;1384:5;1381:13;1373:81;;;1450:1;1436:16;;1417:1;1406:13;1373:81;;;1377:3;;1043:421;952:518;;;:::o;1646:1299::-;1766:10;;-1:-1:-1;;;;;1788:30:2;;1785:56;;;1821:18;;:::i;:::-;1850:97;1940:6;1900:38;1932:4;1926:11;1900:38;:::i;:::-;1894:4;1850:97;:::i;:::-;1996:4;2027:2;2016:14;;2044:1;2039:649;;;;2732:1;2749:6;2746:89;;;-1:-1:-1;2801:19:2;;;2795:26;2746:89;-1:-1:-1;;1603:1:2;1599:11;;;1595:24;1591:29;1581:40;1627:1;1623:11;;;1578:57;2848:81;;2009:930;;2039:649;899:1;892:14;;;936:4;923:18;;-1:-1:-1;;2075:20:2;;;2193:222;2207:7;2204:1;2201:14;2193:222;;;2289:19;;;2283:26;2268:42;;2396:4;2381:20;;;;2349:1;2337:14;;;;2223:12;2193:222;;;2197:3;2443:6;2434:7;2431:19;2428:201;;;2504:19;;;2498:26;-1:-1:-1;;2587:1:2;2583:14;;;2599:3;2579:24;2575:37;2571:42;2556:58;2541:74;;2428:201;-1:-1:-1;;;;2675:1:2;2659:14;;;2655:22;2642:36;;-1:-1:-1;1646:1299:2:o;2950:489::-;9000:2857:0;;;;;;;;;;;;",
  "deployedSourceMap": "9000:2857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1070:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2054:242;;;;;;:::i;:::-;;:::i;:::-;;;1194:14:2;;1187:22;1169:41;;1157:2;1142:18;2054:242:0;1029:187:2;1353:26:0;;;;;;;;;1367:25:2;;;1355:2;1340:18;1353:26:0;1221:177:2;9294:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;9294:56:0;;;;;2722:625;;;;;;:::i;:::-;;:::i;5192:117::-;;5243:66;5192:117;;1126:31;;;;;;;;2136:4:2;2124:17;;;2106:36;;2094:2;2079:18;1126:31:0;1964:184:2;10886:195:0;;;;;;:::i;:::-;;:::i;:::-;;9357:50;;;;;;;;;;;;;;;-1:-1:-1;;;9357:50:0;;;;;9414:49;;9461:2;9414:49;;1388:44;;;;;;:::i;:::-;;;;;;;;;;;;;;5508:41;;;;;;:::i;:::-;;;;;;;;;;;;;;1097:20;;;:::i;9227:60::-;;;;;;;;;;;;;;;-1:-1:-1;;;9227:60:0;;;;;2304:410;;;;;;:::i;:::-;;:::i;11744:110::-;;;;;;:::i;:::-;-1:-1:-1;;;;;11831:15:0;11807:4;11831:15;;;:8;:15;;;;;;;;;11744:110;6587:1229;;;;;;:::i;:::-;;:::i;1441:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11336:287;;;;;;:::i;:::-;;:::i;8011:222::-;;;:::i;1070:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2054:242::-;2180:10;2153:4;2170:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2170:30:0;;;;;;;;;;:39;;;2227:37;2153:4;;2170:30;;2227:37;;;;2203:6;1367:25:2;;1355:2;1340:18;;1221:177;2227:37:0;;;;;;;;-1:-1:-1;2284:4:0;2054:242;;;;;:::o;2722:625::-;-1:-1:-1;;;;;2879:15:0;;2844:4;2879:15;;;:9;:15;;;;;;;;2895:10;2879:27;;;;;;;;-1:-1:-1;;2959:28:0;;2955:93;;3032:16;3042:6;3032:7;:16;:::i;:::-;-1:-1:-1;;;;;3002:15:0;;;;;;:9;:15;;;;;;;;3018:10;3002:27;;;;;;;:46;2955:93;-1:-1:-1;;;;;3061:15:0;;;;;;:9;:15;;;;;:25;;3080:6;;3061:15;:25;;3080:6;;3061:25;:::i;:::-;;;;-1:-1:-1;;;;;;;3237:13:0;;;;;;;:9;:13;;;;;;;:23;;;;;;3289:26;3237:13;;3289:26;;;;;;;3254:6;1367:25:2;;1355:2;1340:18;;1221:177;3289:26:0;;;;;;;;-1:-1:-1;3335:4:0;;2722:625;-1:-1:-1;;;;2722:625:0:o;10886:195::-;10966:10;10957:20;;;;:8;:20;;;;;;;;10952:45;;10986:11;;-1:-1:-1;;;10986:11:0;;;;;;;;;;;10952:45;11008:21;11014:5;11021:7;11008:5;:21::i;:::-;11045:28;;;-1:-1:-1;;;;;4711:32:2;;4693:51;;4775:2;4760:18;;4753:34;;;11045:28:0;;4666:18:2;11045:28:0;;;;;;;;10886:195;;:::o;1097:20::-;;;;;;;:::i;2304:410::-;2426:10;2399:4;2416:21;;;:9;:21;;;;;:31;;2441:6;;2416:21;2399:4;;2416:31;;2441:6;;2416:31;:::i;:::-;;;;-1:-1:-1;;;;;;;2598:13:0;;;;;;:9;:13;;;;;;;:23;;;;;;2650:32;2659:10;;2650:32;;;;2615:6;1367:25:2;;1355:2;1340:18;;1221:177;6587:1229:0;6817:8;6799:15;:26;6795:54;;;6834:15;;-1:-1:-1;;;6834:15:0;;;;;;;;;;;6795:54;-1:-1:-1;;;;;7344:13:0;;;7019:24;7344:13;;;:6;:13;;;;;;;;:15;;7046:496;7344:15;;;;;;7147:278;;5243:66;7147:278;;;5085:25:2;;;;5126:18;;;5119:60;;;;5215:32;;;5195:18;;;5188:60;5264:18;;;5257:34;;;5307:19;;;5300:35;;;;5351:19;;;5344:35;;;7019:24:0;7074:393;;5057:19:2;;7147:278:0;;;;;;;;;;;;7111:337;;;;;;7074:14;:393::i;:::-;7046:496;;;;;;;;;;;;5617:25:2;;;;5690:4;5678:17;;5658:18;;;5651:45;5712:18;;;5705:34;;;5755:18;;;5748:34;;;5589:19;;7046:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7046:496:0;;-1:-1:-1;;7046:496:0;;;-1:-1:-1;;;;;;;7563:30:0;;7559:58;;7602:15;;-1:-1:-1;;;7602:15:0;;;;;;;;;;;7559:58;7658:5;-1:-1:-1;;;;;7638:25:0;:16;-1:-1:-1;;;;;7638:25:0;;7634:53;;7672:15;;-1:-1:-1;;;7672:15:0;;;;;;;;;;;7634:53;-1:-1:-1;;;;;7704:27:0;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;7777:31;1367:25:2;;;7704:36:0;;7777:31;;;;;1340:18:2;7777:31:0;;;;;;;6587:1229;;;;;;;:::o;11336:287::-;11467:10;11458:20;;;;:8;:20;;;;;;;;11453:45;;11487:11;;-1:-1:-1;;;11487:11:0;;;;;;;;;;;11453:45;-1:-1:-1;;;;;11509:24:0;;;;;;:8;:24;;;;;;;;;:40;;-1:-1:-1;;11509:40:0;;;;;;;;;;11565:50;;5961:51:2;;;6028:18;;;6021:50;11565::0;;5934:18:2;11565:50:0;5793:284:2;8011:222:0;8067:7;8124:14;;8107:13;:31;:118;;8200:25;8446:16;;8485:19;;8375:220;;;4637:66;8375:220;;;6868:25:2;6909:18;;;6902:34;;;;6952:18;;;6945:34;8527:13:0;6995:18:2;;;6988:34;8571:4:0;7038:19:2;;;7031:61;8307:7:0;;6840:19:2;;8375:220:0;;;;;;;;;;;;8347:263;;;;;;8327:283;;8241:377;;8200:25;8087:138;;8011:222;:::o;8107:118::-;-1:-1:-1;8158:22:0;;;8011:222::o;3548:186::-;3634:6;3619:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;3653:13:0;;;;;;:9;:13;;;;;:23;;3670:6;;3653:13;:23;;3670:6;;3653:23;:::i;:::-;;;;-1:-1:-1;;3694:32:0;;1367:25:2;;;-1:-1:-1;;;;;3694:32:0;;;3711:1;;3694:32;;1355:2:2;1340:18;3694:32:0;;;;;;;3548:186;;:::o;8626:241::-;8717:7;8814:17;:15;:17::i;:::-;8785:59;;-1:-1:-1;;;8785:59:0;;;6470:27:2;6513:11;;;6506:27;;;;6549:12;;;6542:28;;;6586:12;;8785:59:0;;;;;;;;;;;;8757:102;;;;;;8737:122;;8626:241;;;:::o;14:527:2:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;263:1;273:140;287:6;284:1;281:13;273:140;;;398:2;382:14;;;378:23;;372:30;367:2;348:17;;;344:26;337:66;302:10;273:140;;;277:3;462:1;457:2;448:6;437:9;433:22;429:31;422:42;532:2;525;521:7;516:2;508:6;504:15;500:29;489:9;485:45;481:54;473:62;;;14:527;;;;:::o;546:173::-;614:20;;-1:-1:-1;;;;;663:31:2;;653:42;;643:70;;709:1;706;699:12;643:70;546:173;;;:::o;724:300::-;792:6;800;853:2;841:9;832:7;828:23;824:32;821:52;;;869:1;866;859:12;821:52;892:29;911:9;892:29;:::i;:::-;882:39;990:2;975:18;;;;962:32;;-1:-1:-1;;;724:300:2:o;1403:374::-;1480:6;1488;1496;1549:2;1537:9;1528:7;1524:23;1520:32;1517:52;;;1565:1;1562;1555:12;1517:52;1588:29;1607:9;1588:29;:::i;:::-;1578:39;;1636:38;1670:2;1659:9;1655:18;1636:38;:::i;:::-;1403:374;;1626:48;;-1:-1:-1;;;1743:2:2;1728:18;;;;1715:32;;1403:374::o;2153:186::-;2212:6;2265:2;2253:9;2244:7;2240:23;2236:32;2233:52;;;2281:1;2278;2271:12;2233:52;2304:29;2323:9;2304:29;:::i;:::-;2294:39;2153:186;-1:-1:-1;;;2153:186:2:o;2344:903::-;2455:6;2463;2471;2479;2487;2495;2503;2556:3;2544:9;2535:7;2531:23;2527:33;2524:53;;;2573:1;2570;2563:12;2524:53;2596:29;2615:9;2596:29;:::i;:::-;2586:39;;2644:38;2678:2;2667:9;2663:18;2644:38;:::i;:::-;2634:48;-1:-1:-1;2751:2:2;2736:18;;2723:32;;-1:-1:-1;2852:2:2;2837:18;;2824:32;;-1:-1:-1;2934:3:2;2919:19;;2906:33;2983:4;2970:18;;2958:31;;2948:59;;3003:1;3000;2993:12;2948:59;2344:903;;;;-1:-1:-1;2344:903:2;;;;3026:7;3106:3;3091:19;;3078:33;;-1:-1:-1;3210:3:2;3195:19;;;3182:33;;2344:903;-1:-1:-1;;2344:903:2:o;3252:260::-;3320:6;3328;3381:2;3369:9;3360:7;3356:23;3352:32;3349:52;;;3397:1;3394;3387:12;3349:52;3420:29;3439:9;3420:29;:::i;:::-;3410:39;;3468:38;3502:2;3491:9;3487:18;3468:38;:::i;:::-;3458:48;;3252:260;;;;;:::o;3517:347::-;3582:6;3590;3643:2;3631:9;3622:7;3618:23;3614:32;3611:52;;;3659:1;3656;3649:12;3611:52;3682:29;3701:9;3682:29;:::i;:::-;3672:39;;3761:2;3750:9;3746:18;3733:32;3808:5;3801:13;3794:21;3787:5;3784:32;3774:60;;3830:1;3827;3820:12;3774:60;3853:5;3843:15;;;3517:347;;;;;:::o;3869:380::-;3948:1;3944:12;;;;3991;;;4012:61;;4066:4;4058:6;4054:17;4044:27;;4012:61;4119:2;4111:6;4108:14;4088:18;4085:38;4082:161;;4165:10;4160:3;4156:20;4153:1;4146:31;4200:4;4197:1;4190:15;4228:4;4225:1;4218:15;4082:161;;3869:380;;;:::o;4254:127::-;4315:10;4310:3;4306:20;4303:1;4296:31;4346:4;4343:1;4336:15;4370:4;4367:1;4360:15;4386:128;4453:9;;;4474:11;;;4471:37;;;4488:18;;:::i;6082:125::-;6147:9;;;6168:10;;;6165:36;;;6181:18;;:::i",
  "source": "// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.18;\r\n\r\n/// @notice Modern, minimalist, and gas-optimized ERC20 implementation.\r\n/// @author Solbase (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC20/ERC20.sol)\r\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20/ERC20.sol)\r\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\r\nabstract contract ERC20 {\r\n    /// -----------------------------------------------------------------------\r\n    /// Events\r\n    /// -----------------------------------------------------------------------\r\n\r\n    event Transfer(address indexed from, address indexed to, uint256 amount);\r\n\r\n    event Approval(\r\n        address indexed owner,\r\n        address indexed spender,\r\n        uint256 amount\r\n    );\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Metadata Storage\r\n    /// -----------------------------------------------------------------------\r\n\r\n    string public name;\r\n\r\n    string public symbol;\r\n\r\n    uint8 public immutable decimals;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// ERC20 Storage\r\n    /// -----------------------------------------------------------------------\r\n\r\n    uint256 public totalSupply;\r\n\r\n    mapping(address => uint256) public balanceOf;\r\n\r\n    mapping(address => mapping(address => uint256)) public allowance;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Constructor\r\n    /// -----------------------------------------------------------------------\r\n\r\n    constructor(string memory _name, string memory _symbol, uint8 _decimals) {\r\n        name = _name;\r\n        symbol = _symbol;\r\n        decimals = _decimals;\r\n    }\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// ERC20 Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function approve(\r\n        address spender,\r\n        uint256 amount\r\n    ) public virtual returns (bool) {\r\n        allowance[msg.sender][spender] = amount;\r\n\r\n        emit Approval(msg.sender, spender, amount);\r\n\r\n        return true;\r\n    }\r\n\r\n    function transfer(\r\n        address to,\r\n        uint256 amount\r\n    ) public virtual returns (bool) {\r\n        balanceOf[msg.sender] -= amount;\r\n\r\n        // Cannot overflow because the sum of all user\r\n        // balances can't exceed the max uint256 value.\r\n        unchecked {\r\n            balanceOf[to] += amount;\r\n        }\r\n\r\n        emit Transfer(msg.sender, to, amount);\r\n\r\n        return true;\r\n    }\r\n\r\n    function transferFrom(\r\n        address from,\r\n        address to,\r\n        uint256 amount\r\n    ) public virtual returns (bool) {\r\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\r\n\r\n        if (allowed != type(uint256).max)\r\n            allowance[from][msg.sender] = allowed - amount;\r\n\r\n        balanceOf[from] -= amount;\r\n\r\n        // Cannot overflow because the sum of all user\r\n        // balances can't exceed the max uint256 value.\r\n        unchecked {\r\n            balanceOf[to] += amount;\r\n        }\r\n\r\n        emit Transfer(from, to, amount);\r\n\r\n        return true;\r\n    }\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Internal Mint Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function _mint(address to, uint256 amount) internal virtual {\r\n        totalSupply += amount;\r\n\r\n        balanceOf[to] += amount;\r\n\r\n        emit Transfer(address(0), to, amount);\r\n    }\r\n}\r\n\r\n/// @notice ERC20 + EIP-2612 implementation, including EIP712 logic.\r\n/** @dev Solbase ERC20Permit implementation (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC20/extensions/ERC20Permit.sol)\r\n ** plus Solbase EIP712 implementation (https://github.com/Sol-DAO/solbase/blob/main/src/utils/EIP712.sol)\r\n ** NOTE: only difference from Solbase EIP712 is the EIP-712 domain variables are internal rather than immutable,\r\n ** because they are read during contract creation */\r\n\r\nabstract contract ERC20Permit is ERC20 {\r\n    /// -----------------------------------------------------------------------\r\n    /// EIP-712 Domain Variables\r\n    /// -----------------------------------------------------------------------\r\n\r\n    /// @dev `keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")`.\r\n    bytes32 internal constant DOMAIN_TYPEHASH =\r\n        0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;\r\n\r\n    bytes32 internal hashedDomainName;\r\n\r\n    bytes32 internal hashedDomainVersion;\r\n\r\n    bytes32 internal initialDomainSeparator;\r\n\r\n    uint256 internal initialChainId;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// EIP-2612 Constants\r\n    /// -----------------------------------------------------------------------\r\n\r\n    /// @dev `keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\")`.\r\n    bytes32 public constant PERMIT_TYPEHASH =\r\n        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// EIP-2612 Storage\r\n    /// -----------------------------------------------------------------------\r\n\r\n    mapping(address => uint256) public nonces;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Custom Errors\r\n    /// -----------------------------------------------------------------------\r\n\r\n    error PermitExpired();\r\n\r\n    error InvalidSigner();\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Constructor\r\n    /// -----------------------------------------------------------------------\r\n\r\n    constructor(\r\n        string memory _name,\r\n        string memory _symbol,\r\n        string memory _version,\r\n        uint8 _decimals\r\n    ) ERC20(_name, _symbol, _decimals) {\r\n        hashedDomainName = keccak256(bytes(_name));\r\n\r\n        hashedDomainVersion = keccak256(bytes(_version));\r\n\r\n        initialDomainSeparator = _computeDomainSeparator();\r\n\r\n        initialChainId = block.chainid;\r\n    }\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// EIP-2612 Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) public virtual {\r\n        if (block.timestamp > deadline) revert PermitExpired();\r\n\r\n        // Unchecked because the only math done is incrementing\r\n        // the owner's nonce which cannot realistically overflow.\r\n        unchecked {\r\n            address recoveredAddress = ecrecover(\r\n                _computeDigest(\r\n                    keccak256(\r\n                        abi.encode(\r\n                            PERMIT_TYPEHASH,\r\n                            owner,\r\n                            spender,\r\n                            value,\r\n                            nonces[owner]++,\r\n                            deadline\r\n                        )\r\n                    )\r\n                ),\r\n                v,\r\n                r,\r\n                s\r\n            );\r\n\r\n            if (recoveredAddress == address(0)) revert InvalidSigner();\r\n\r\n            if (recoveredAddress != owner) revert InvalidSigner();\r\n\r\n            allowance[recoveredAddress][spender] = value;\r\n        }\r\n\r\n        emit Approval(owner, spender, value);\r\n    }\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// EIP-712 Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function domainSeparator() public view virtual returns (bytes32) {\r\n        return\r\n            block.chainid == initialChainId\r\n                ? initialDomainSeparator\r\n                : _computeDomainSeparator();\r\n    }\r\n\r\n    function _computeDomainSeparator() internal view virtual returns (bytes32) {\r\n        return\r\n            keccak256(\r\n                abi.encode(\r\n                    DOMAIN_TYPEHASH,\r\n                    hashedDomainName,\r\n                    hashedDomainVersion,\r\n                    block.chainid,\r\n                    address(this)\r\n                )\r\n            );\r\n    }\r\n\r\n    function _computeDigest(\r\n        bytes32 hashStruct\r\n    ) internal view virtual returns (bytes32) {\r\n        return\r\n            keccak256(\r\n                abi.encodePacked(\"\\x19\\x01\", domainSeparator(), hashStruct)\r\n            );\r\n    }\r\n}\r\n\r\n/// @notice Enshroud ERC20 token contract\r\n/// @dev mintable by isMinter role mapping; not burnable; ERC20Permit implemented\r\ncontract EnshroudToken is ERC20Permit {\r\n    /// -----------------------------------------------------------------------\r\n    /// ERC20 data\r\n    /// -----------------------------------------------------------------------\r\n    string public constant ENSHROUDTOKEN_NAME = \"Enshroud Token\";\r\n    string public constant ENSHROUDTOKEN_SYMBOL = \"ENSHROUD\";\r\n    string public constant ENSHROUDTOKEN_VERSION = \"1\";\r\n    uint8 public constant ENSHROUDTOKEN_DECIMALS = 18;\r\n\r\n    mapping(address => bool) private isMinter;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Errors\r\n    /// -----------------------------------------------------------------------\r\n\r\n    error NotMinter();\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Events\r\n    /// -----------------------------------------------------------------------\r\n\r\n    event MinterStatusUpdated(address minter, bool status);\r\n\r\n    event TokensMinted(address recipient, uint256 amount);\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Constructor\r\n    /// -----------------------------------------------------------------------\r\n\r\n    /// include initial mint and isMinter status here\r\n    /// @param _initialMinter: address initially designated as a minter, presumably deployer and/or DAO governance\r\n    constructor(\r\n        address _initialMinter\r\n    )\r\n        ERC20Permit(\r\n            ENSHROUDTOKEN_NAME,\r\n            ENSHROUDTOKEN_SYMBOL,\r\n            ENSHROUDTOKEN_VERSION,\r\n            ENSHROUDTOKEN_DECIMALS\r\n        )\r\n    {\r\n        isMinter[_initialMinter] = true;\r\n    }\r\n\r\n    /// @notice mints '_amount' of Enshroud Token to '_addr'\r\n    /// @param _addr address that will receive the minted $ENSHROUD tokens\r\n    /// @param _amount amount of $ENSHROUD tokens that will be minted\r\n    function mint(address _addr, uint256 _amount) external {\r\n        if (!isMinter[msg.sender]) revert NotMinter();\r\n        _mint(_addr, _amount);\r\n        emit TokensMinted(_addr, _amount);\r\n    }\r\n\r\n    /// @notice updates if an address is authorized to mint tokens, by an existing minter\r\n    /// @param _minterAddress address whose minter authorization status will be updated\r\n    /// @param _minterStatus: updated minter authorization status\r\n    function updateMinterStatus(\r\n        address _minterAddress,\r\n        bool _minterStatus\r\n    ) external {\r\n        if (!isMinter[msg.sender]) revert NotMinter();\r\n        isMinter[_minterAddress] = _minterStatus;\r\n        emit MinterStatusUpdated(_minterAddress, _minterStatus);\r\n    }\r\n\r\n    /// @notice returns if an address is authorized to mint tokens\r\n    /// @param _addr queried minter address\r\n    function getMinterStatus(address _addr) external view returns (bool) {\r\n        return isMinter[_addr];\r\n    }\r\n}\r\n",
  "sourcePath": "/home/ensh/dapp/truffle/contracts/EnshroudToken.sol",
  "ast": {
    "absolutePath": "project:/contracts/EnshroudToken.sol",
    "exportedSymbols": {
      "ERC20": [
        214
      ],
      "ERC20Permit": [
        428
      ],
      "EnshroudToken": [
        554
      ]
    },
    "id": 555,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:0"
      },
      {
        "abstract": true,
        "baseContracts": [],
        "canonicalName": "ERC20",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2,
          "nodeType": "StructuredDocumentation",
          "src": "61:406:0",
          "text": "@notice Modern, minimalist, and gas-optimized ERC20 implementation.\n @author Solbase (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC20/ERC20.sol)\n @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20/ERC20.sol)\n @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it."
        },
        "fullyImplemented": true,
        "id": 214,
        "linearizedBaseContracts": [
          214
        ],
        "name": "ERC20",
        "nameLocation": "485:5:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 3,
              "nodeType": "StructuredDocumentation",
              "src": "498:174:0",
              "text": "-----------------------------------------------------------------------\n Events\n -----------------------------------------------------------------------"
            },
            "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "id": 11,
            "name": "Transfer",
            "nameLocation": "684:8:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 10,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "709:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 11,
                  "src": "693:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "731:2:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 11,
                  "src": "715:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "715:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "743:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 11,
                  "src": "735:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "735:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "692:58:0"
            },
            "src": "678:73:0"
          },
          {
            "anonymous": false,
            "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
            "id": 19,
            "name": "Approval",
            "nameLocation": "765:8:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 18,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "800:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 19,
                  "src": "784:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "784:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "832:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 19,
                  "src": "816:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "858:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 19,
                  "src": "850:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "773:98:0"
            },
            "src": "759:113:0"
          },
          {
            "constant": false,
            "documentation": {
              "id": 20,
              "nodeType": "StructuredDocumentation",
              "src": "880:184:0",
              "text": "-----------------------------------------------------------------------\n Metadata Storage\n -----------------------------------------------------------------------"
            },
            "functionSelector": "06fdde03",
            "id": 22,
            "mutability": "mutable",
            "name": "name",
            "nameLocation": "1084:4:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1070:18:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 21,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1070:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "95d89b41",
            "id": 24,
            "mutability": "mutable",
            "name": "symbol",
            "nameLocation": "1111:6:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1097:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 23,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1097:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "313ce567",
            "id": 26,
            "mutability": "immutable",
            "name": "decimals",
            "nameLocation": "1149:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1126:31:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 25,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1126:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 27,
              "nodeType": "StructuredDocumentation",
              "src": "1166:181:0",
              "text": "-----------------------------------------------------------------------\n ERC20 Storage\n -----------------------------------------------------------------------"
            },
            "functionSelector": "18160ddd",
            "id": 29,
            "mutability": "mutable",
            "name": "totalSupply",
            "nameLocation": "1368:11:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1353:26:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 28,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1353:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "70a08231",
            "id": 33,
            "mutability": "mutable",
            "name": "balanceOf",
            "nameLocation": "1423:9:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1388:44:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 30,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1396:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1388:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 31,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1407:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "dd62ed3e",
            "id": 39,
            "mutability": "mutable",
            "name": "allowance",
            "nameLocation": "1496:9:0",
            "nodeType": "VariableDeclaration",
            "scope": 214,
            "src": "1441:64:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 38,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 34,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1449:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1441:47:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 37,
                "keyName": "",
                "keyNameLocation": "-1:-1:-1",
                "keyType": {
                  "id": 35,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1468:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1460:27:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 36,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1479:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 61,
              "nodeType": "Block",
              "src": "1772:89:0",
              "statements": [
                {
                  "expression": {
                    "id": 51,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22,
                      "src": "1783:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 50,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "1790:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1783:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 52,
                  "nodeType": "ExpressionStatement",
                  "src": "1783:12:0"
                },
                {
                  "expression": {
                    "id": 55,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 53,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24,
                      "src": "1806:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 54,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44,
                      "src": "1815:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1806:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 56,
                  "nodeType": "ExpressionStatement",
                  "src": "1806:16:0"
                },
                {
                  "expression": {
                    "id": 59,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 57,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26,
                      "src": "1833:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 58,
                      "name": "_decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46,
                      "src": "1844:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "1833:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 60,
                  "nodeType": "ExpressionStatement",
                  "src": "1833:20:0"
                }
              ]
            },
            "documentation": {
              "id": 40,
              "nodeType": "StructuredDocumentation",
              "src": "1514:179:0",
              "text": "-----------------------------------------------------------------------\n Constructor\n -----------------------------------------------------------------------"
            },
            "id": 62,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 47,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "1725:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 62,
                  "src": "1711:19:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 41,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1711:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "1746:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 62,
                  "src": "1732:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 43,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1732:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nameLocation": "1761:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 62,
                  "src": "1755:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 45,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1755:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1710:61:0"
            },
            "returnParameters": {
              "id": 48,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1772:0:0"
            },
            "scope": 214,
            "src": "1699:162:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 90,
              "nodeType": "Block",
              "src": "2159:137:0",
              "statements": [
                {
                  "expression": {
                    "id": 79,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 72,
                          "name": "allowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39,
                          "src": "2170:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 76,
                        "indexExpression": {
                          "expression": {
                            "id": 73,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2180:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 74,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2184:6:0",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2180:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2170:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 77,
                      "indexExpression": {
                        "id": 75,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65,
                        "src": "2192:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2170:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 78,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67,
                      "src": "2203:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2170:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 80,
                  "nodeType": "ExpressionStatement",
                  "src": "2170:39:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 82,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2236:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 83,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2240:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2236:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 84,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65,
                        "src": "2248:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 85,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67,
                        "src": "2257:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 81,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19,
                      "src": "2227:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 86,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2227:37:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 87,
                  "nodeType": "EmitStatement",
                  "src": "2222:42:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 88,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2284:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 71,
                  "id": 89,
                  "nodeType": "Return",
                  "src": "2277:11:0"
                }
              ]
            },
            "documentation": {
              "id": 63,
              "nodeType": "StructuredDocumentation",
              "src": "1869:179:0",
              "text": "-----------------------------------------------------------------------\n ERC20 Logic\n -----------------------------------------------------------------------"
            },
            "functionSelector": "095ea7b3",
            "id": 91,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "2063:7:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 68,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "2089:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "2081:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 64,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2081:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2115:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "2107:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2107:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2070:58:0"
            },
            "returnParameters": {
              "id": 71,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "2153:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 69,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2153:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2152:6:0"
            },
            "scope": 214,
            "src": "2054:242:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 123,
              "nodeType": "Block",
              "src": "2405:309:0",
              "statements": [
                {
                  "expression": {
                    "id": 105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 100,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33,
                        "src": "2416:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 103,
                      "indexExpression": {
                        "expression": {
                          "id": 101,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2426:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2430:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2426:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2416:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 104,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 95,
                      "src": "2441:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2416:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 106,
                  "nodeType": "ExpressionStatement",
                  "src": "2416:31:0"
                },
                {
                  "id": 113,
                  "nodeType": "UncheckedBlock",
                  "src": "2573:60:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 107,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33,
                            "src": "2598:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 109,
                          "indexExpression": {
                            "id": 108,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 93,
                            "src": "2608:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2598:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 110,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 95,
                          "src": "2615:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2598:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 112,
                      "nodeType": "ExpressionStatement",
                      "src": "2598:23:0"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 115,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2659:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 116,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2663:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2659:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 117,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 93,
                        "src": "2671:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 118,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 95,
                        "src": "2675:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 114,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11,
                      "src": "2650:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2650:32:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 120,
                  "nodeType": "EmitStatement",
                  "src": "2645:37:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2702:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 99,
                  "id": 122,
                  "nodeType": "Return",
                  "src": "2695:11:0"
                }
              ]
            },
            "functionSelector": "a9059cbb",
            "id": 124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nameLocation": "2313:8:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 93,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2340:2:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "2332:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 92,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2332:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 95,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2361:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "2353:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 94,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2353:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2321:53:0"
            },
            "returnParameters": {
              "id": 99,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 98,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "2399:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 97,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2399:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2398:6:0"
            },
            "scope": 214,
            "src": "2304:410:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 184,
              "nodeType": "Block",
              "src": "2850:497:0",
              "statements": [
                {
                  "assignments": [
                    136
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 136,
                      "mutability": "mutable",
                      "name": "allowed",
                      "nameLocation": "2869:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 184,
                      "src": "2861:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 135,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2861:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 143,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 137,
                        "name": "allowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 39,
                        "src": "2879:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 139,
                      "indexExpression": {
                        "id": 138,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 126,
                        "src": "2889:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2879:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 142,
                    "indexExpression": {
                      "expression": {
                        "id": 140,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2895:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2899:6:0",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2895:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2879:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2861:45:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 144,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 136,
                      "src": "2959:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 147,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2975:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 146,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2975:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 145,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "2970:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2970:13:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "2984:3:0",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "2970:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2959:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 162,
                  "nodeType": "IfStatement",
                  "src": "2955:93:0",
                  "trueBody": {
                    "expression": {
                      "id": 160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 151,
                            "name": "allowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 39,
                            "src": "3002:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                              "typeString": "mapping(address => mapping(address => uint256))"
                            }
                          },
                          "id": 155,
                          "indexExpression": {
                            "id": 152,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 126,
                            "src": "3012:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3002:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 156,
                        "indexExpression": {
                          "expression": {
                            "id": 153,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3018:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3022:6:0",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "3018:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "3002:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 157,
                          "name": "allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 136,
                          "src": "3032:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 158,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 130,
                          "src": "3042:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3032:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3002:46:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 161,
                    "nodeType": "ExpressionStatement",
                    "src": "3002:46:0"
                  }
                },
                {
                  "expression": {
                    "id": 167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 163,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33,
                        "src": "3061:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 165,
                      "indexExpression": {
                        "id": 164,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 126,
                        "src": "3071:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3061:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 166,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 130,
                      "src": "3080:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3061:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 168,
                  "nodeType": "ExpressionStatement",
                  "src": "3061:25:0"
                },
                {
                  "id": 175,
                  "nodeType": "UncheckedBlock",
                  "src": "3212:60:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 169,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33,
                            "src": "3237:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 171,
                          "indexExpression": {
                            "id": 170,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 128,
                            "src": "3247:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "3237:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 172,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 130,
                          "src": "3254:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3237:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 174,
                      "nodeType": "ExpressionStatement",
                      "src": "3237:23:0"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 177,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 126,
                        "src": "3298:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 178,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "3304:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 179,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 130,
                        "src": "3308:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 176,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11,
                      "src": "3289:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3289:26:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 181,
                  "nodeType": "EmitStatement",
                  "src": "3284:31:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3335:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 134,
                  "id": 183,
                  "nodeType": "Return",
                  "src": "3328:11:0"
                }
              ]
            },
            "functionSelector": "23b872dd",
            "id": 185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "2731:12:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 126,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2762:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 185,
                  "src": "2754:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 125,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2754:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 128,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2785:2:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 185,
                  "src": "2777:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2777:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 130,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2806:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 185,
                  "src": "2798:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2798:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2743:76:0"
            },
            "returnParameters": {
              "id": 134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 133,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 185,
                  "src": "2844:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 132,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2844:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2843:6:0"
            },
            "scope": 214,
            "src": "2722:625:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 212,
              "nodeType": "Block",
              "src": "3608:126:0",
              "statements": [
                {
                  "expression": {
                    "id": 195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 193,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29,
                      "src": "3619:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 194,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 190,
                      "src": "3634:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3619:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 196,
                  "nodeType": "ExpressionStatement",
                  "src": "3619:21:0"
                },
                {
                  "expression": {
                    "id": 201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 197,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33,
                        "src": "3653:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 199,
                      "indexExpression": {
                        "id": 198,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "3663:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3653:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 200,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 190,
                      "src": "3670:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3653:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 202,
                  "nodeType": "ExpressionStatement",
                  "src": "3653:23:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3711:1:0",
                            "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": 205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3703:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 204,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3703:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3703:10:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 208,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 188,
                        "src": "3715:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 209,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 190,
                        "src": "3719:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 203,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11,
                      "src": "3694:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3694:32:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 211,
                  "nodeType": "EmitStatement",
                  "src": "3689:37:0"
                }
              ]
            },
            "documentation": {
              "id": 186,
              "nodeType": "StructuredDocumentation",
              "src": "3355:187:0",
              "text": "-----------------------------------------------------------------------\n Internal Mint Logic\n -----------------------------------------------------------------------"
            },
            "id": 213,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "3557:5:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 188,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3571:2:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "3563:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 187,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3563:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 190,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3583:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "3575:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 189,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3575:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3562:28:0"
            },
            "returnParameters": {
              "id": 192,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3608:0:0"
            },
            "scope": 214,
            "src": "3548:186:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 555,
        "src": "467:3270:0",
        "usedErrors": [],
        "usedEvents": [
          11,
          19
        ]
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 216,
              "name": "ERC20",
              "nameLocations": [
                "4260:5:0"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 214,
              "src": "4260:5:0"
            },
            "id": 217,
            "nodeType": "InheritanceSpecifier",
            "src": "4260:5:0"
          }
        ],
        "canonicalName": "ERC20Permit",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 215,
          "nodeType": "StructuredDocumentation",
          "src": "3811:412:0",
          "text": "@dev Solbase ERC20Permit implementation (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC20/extensions/ERC20Permit.sol)** plus Solbase EIP712 implementation (https://github.com/Sol-DAO/solbase/blob/main/src/utils/EIP712.sol)** NOTE: only difference from Solbase EIP712 is the EIP-712 domain variables are internal rather than immutable,** because they are read during contract creation "
        },
        "fullyImplemented": true,
        "id": 428,
        "linearizedBaseContracts": [
          428,
          214
        ],
        "name": "ERC20Permit",
        "nameLocation": "4245:11:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "documentation": {
              "id": 218,
              "nodeType": "StructuredDocumentation",
              "src": "4471:107:0",
              "text": "@dev `keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")`."
            },
            "id": 221,
            "mutability": "constant",
            "name": "DOMAIN_TYPEHASH",
            "nameLocation": "4610:15:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "4584:119:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 219,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4584:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307838623733633363363962623866653364353132656363346366373539636337393233396637623137396230666661636161396137356435323262333934303066",
              "id": 220,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4637:66:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_63076024560530113402979550242307453568063438748328787417531900361828837441551_by_1",
                "typeString": "int_const 6307...(69 digits omitted)...1551"
              },
              "value": "0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 223,
            "mutability": "mutable",
            "name": "hashedDomainName",
            "nameLocation": "4729:16:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "4712:33:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 222,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4712:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 225,
            "mutability": "mutable",
            "name": "hashedDomainVersion",
            "nameLocation": "4771:19:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "4754:36:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 224,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4754:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 227,
            "mutability": "mutable",
            "name": "initialDomainSeparator",
            "nameLocation": "4816:22:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "4799:39:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 226,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4799:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 229,
            "mutability": "mutable",
            "name": "initialChainId",
            "nameLocation": "4864:14:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "4847:31:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 228,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4847:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 230,
              "nodeType": "StructuredDocumentation",
              "src": "5079:107:0",
              "text": "@dev `keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\")`."
            },
            "functionSelector": "30adf81f",
            "id": 233,
            "mutability": "constant",
            "name": "PERMIT_TYPEHASH",
            "nameLocation": "5216:15:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "5192:117:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 231,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "5192:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307836653731656461653132623162393766346431663630333730666566313031303566613266616165303132363131346131363963363438343564363132366339",
              "id": 232,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "5243:66:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_49955707469362902507454157297736832118868343942642399513960811609542965143241_by_1",
                "typeString": "int_const 4995...(69 digits omitted)...3241"
              },
              "value": "0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 234,
              "nodeType": "StructuredDocumentation",
              "src": "5318:184:0",
              "text": "-----------------------------------------------------------------------\n EIP-2612 Storage\n -----------------------------------------------------------------------"
            },
            "functionSelector": "7ecebe00",
            "id": 238,
            "mutability": "mutable",
            "name": "nonces",
            "nameLocation": "5543:6:0",
            "nodeType": "VariableDeclaration",
            "scope": 428,
            "src": "5508:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 237,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 235,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5516:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5508:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 236,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5527:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 239,
              "nodeType": "StructuredDocumentation",
              "src": "5558:181:0",
              "text": "-----------------------------------------------------------------------\n Custom Errors\n -----------------------------------------------------------------------"
            },
            "errorSelector": "1a15a3cc",
            "id": 241,
            "name": "PermitExpired",
            "nameLocation": "5751:13:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 240,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5764:2:0"
            },
            "src": "5745:22:0"
          },
          {
            "errorSelector": "815e1d64",
            "id": 243,
            "name": "InvalidSigner",
            "nameLocation": "5781:13:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5794:2:0"
            },
            "src": "5775:22:0"
          },
          {
            "body": {
              "id": 288,
              "nodeType": "Block",
              "src": "6163:228:0",
              "statements": [
                {
                  "expression": {
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 260,
                      "name": "hashedDomainName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 223,
                      "src": "6174:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 264,
                              "name": "_name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 246,
                              "src": "6209:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 263,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6203:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 262,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6203:5:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6203:12:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 261,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "6193:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6193:23:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "6174:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "6174:42:0"
                },
                {
                  "expression": {
                    "id": 276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 269,
                      "name": "hashedDomainVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 225,
                      "src": "6229:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 273,
                              "name": "_version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 250,
                              "src": "6267:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 272,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6261:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 271,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6261:5:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6261:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 270,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "6251:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6251:26:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "6229:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 277,
                  "nodeType": "ExpressionStatement",
                  "src": "6229:48:0"
                },
                {
                  "expression": {
                    "id": 281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 278,
                      "name": "initialDomainSeparator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 227,
                      "src": "6290:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 279,
                        "name": "_computeDomainSeparator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 409,
                        "src": "6315:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                          "typeString": "function () view returns (bytes32)"
                        }
                      },
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6315:25:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "6290:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 282,
                  "nodeType": "ExpressionStatement",
                  "src": "6290:50:0"
                },
                {
                  "expression": {
                    "id": 286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 283,
                      "name": "initialChainId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 229,
                      "src": "6353:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 284,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "6370:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6376:7:0",
                      "memberName": "chainid",
                      "nodeType": "MemberAccess",
                      "src": "6370:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6353:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 287,
                  "nodeType": "ExpressionStatement",
                  "src": "6353:30:0"
                }
              ]
            },
            "documentation": {
              "id": 244,
              "nodeType": "StructuredDocumentation",
              "src": "5805:179:0",
              "text": "-----------------------------------------------------------------------\n Constructor\n -----------------------------------------------------------------------"
            },
            "id": 289,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 255,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 246,
                    "src": "6136:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 256,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 248,
                    "src": "6143:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 257,
                    "name": "_decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 252,
                    "src": "6152:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 258,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 254,
                  "name": "ERC20",
                  "nameLocations": [
                    "6130:5:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 214,
                  "src": "6130:5:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "6130:32:0"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 246,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "6026:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 289,
                  "src": "6012:19:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 245,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6012:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 248,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "6056:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 289,
                  "src": "6042:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 247,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6042:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 250,
                  "mutability": "mutable",
                  "name": "_version",
                  "nameLocation": "6088:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 289,
                  "src": "6074:22:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 249,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6074:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 252,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nameLocation": "6113:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 289,
                  "src": "6107:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 251,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6107:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6001:128:0"
            },
            "returnParameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6163:0:0"
            },
            "scope": 428,
            "src": "5990:401:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 371,
              "nodeType": "Block",
              "src": "6784:1032:0",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 307,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "6799:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6805:9:0",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "6799:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 309,
                      "name": "deadline",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 298,
                      "src": "6817:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6799:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 314,
                  "nodeType": "IfStatement",
                  "src": "6795:54:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 311,
                        "name": "PermitExpired",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "6834:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6834:15:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 313,
                    "nodeType": "RevertStatement",
                    "src": "6827:22:0"
                  }
                },
                {
                  "id": 364,
                  "nodeType": "UncheckedBlock",
                  "src": "6994:766:0",
                  "statements": [
                    {
                      "assignments": [
                        316
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 316,
                          "mutability": "mutable",
                          "name": "recoveredAddress",
                          "nameLocation": "7027:16:0",
                          "nodeType": "VariableDeclaration",
                          "scope": 364,
                          "src": "7019:24:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 315,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7019:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 338,
                      "initialValue": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 322,
                                        "name": "PERMIT_TYPEHASH",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 233,
                                        "src": "7188:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "id": 323,
                                        "name": "owner",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 292,
                                        "src": "7234:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 324,
                                        "name": "spender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 294,
                                        "src": "7270:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 325,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 296,
                                        "src": "7308:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 329,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "++",
                                        "prefix": false,
                                        "src": "7344:15:0",
                                        "subExpression": {
                                          "baseExpression": {
                                            "id": 326,
                                            "name": "nonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 238,
                                            "src": "7344:6:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 328,
                                          "indexExpression": {
                                            "id": 327,
                                            "name": "owner",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 292,
                                            "src": "7351:5:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "7344:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 330,
                                        "name": "deadline",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 298,
                                        "src": "7390:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 320,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "7147:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 321,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "7151:6:0",
                                      "memberName": "encode",
                                      "nodeType": "MemberAccess",
                                      "src": "7147:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 331,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7147:278:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 319,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "7111:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 332,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7111:337:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 318,
                              "name": "_computeDigest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 427,
                              "src": "7074:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32) view returns (bytes32)"
                              }
                            },
                            "id": 333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7074:393:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 334,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 300,
                            "src": "7486:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "id": 335,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 302,
                            "src": "7506:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 336,
                            "name": "s",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 304,
                            "src": "7526:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 317,
                          "name": "ecrecover",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -6,
                          "src": "7046:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                          }
                        },
                        "id": 337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7046:496:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "7019:523:0"
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 339,
                          "name": "recoveredAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 316,
                          "src": "7563:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7591:1:0",
                              "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": 341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7583:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 340,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7583:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7583:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7563:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 348,
                      "nodeType": "IfStatement",
                      "src": "7559:58:0",
                      "trueBody": {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 345,
                            "name": "InvalidSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 243,
                            "src": "7602:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                              "typeString": "function () pure returns (error)"
                            }
                          },
                          "id": 346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7602:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_error",
                            "typeString": "error"
                          }
                        },
                        "id": 347,
                        "nodeType": "RevertStatement",
                        "src": "7595:22:0"
                      }
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 349,
                          "name": "recoveredAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 316,
                          "src": "7638:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 350,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 292,
                          "src": "7658:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7638:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 355,
                      "nodeType": "IfStatement",
                      "src": "7634:53:0",
                      "trueBody": {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 352,
                            "name": "InvalidSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 243,
                            "src": "7672:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                              "typeString": "function () pure returns (error)"
                            }
                          },
                          "id": 353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7672:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_error",
                            "typeString": "error"
                          }
                        },
                        "id": 354,
                        "nodeType": "RevertStatement",
                        "src": "7665:22:0"
                      }
                    },
                    {
                      "expression": {
                        "id": 362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 356,
                              "name": "allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39,
                              "src": "7704:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 359,
                            "indexExpression": {
                              "id": 357,
                              "name": "recoveredAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 316,
                              "src": "7714:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7704:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 360,
                          "indexExpression": {
                            "id": 358,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 294,
                            "src": "7732:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "7704:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "id": 361,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 296,
                          "src": "7743:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7704:44:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 363,
                      "nodeType": "ExpressionStatement",
                      "src": "7704:44:0"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 366,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 292,
                        "src": "7786:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 367,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 294,
                        "src": "7793:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 368,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 296,
                        "src": "7802:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 365,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19,
                      "src": "7777:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7777:31:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 370,
                  "nodeType": "EmitStatement",
                  "src": "7772:36:0"
                }
              ]
            },
            "documentation": {
              "id": 290,
              "nodeType": "StructuredDocumentation",
              "src": "6399:182:0",
              "text": "-----------------------------------------------------------------------\n EIP-2612 Logic\n -----------------------------------------------------------------------"
            },
            "functionSelector": "d505accf",
            "id": 372,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "permit",
            "nameLocation": "6596:6:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 292,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "6621:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6613:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6613:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 294,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "6645:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6637:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 293,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6637:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 296,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "6671:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6663:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 298,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nameLocation": "6695:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6687:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6687:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 300,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "6720:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6714:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 299,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6714:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 302,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "6740:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6732:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 301,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6732:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 304,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "6760:1:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "6752:9:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 303,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6752:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6602:166:0"
            },
            "returnParameters": {
              "id": 306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6784:0:0"
            },
            "scope": 428,
            "src": "6587:1229:0",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 387,
              "nodeType": "Block",
              "src": "8076:157:0",
              "statements": [
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 381,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 378,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "8107:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8113:7:0",
                        "memberName": "chainid",
                        "nodeType": "MemberAccess",
                        "src": "8107:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 380,
                        "name": "initialChainId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 229,
                        "src": "8124:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "8107:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 383,
                        "name": "_computeDomainSeparator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 409,
                        "src": "8200:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                          "typeString": "function () view returns (bytes32)"
                        }
                      },
                      "id": 384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8200:25:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8107:118:0",
                    "trueExpression": {
                      "id": 382,
                      "name": "initialDomainSeparator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 227,
                      "src": "8158:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 377,
                  "id": 386,
                  "nodeType": "Return",
                  "src": "8087:138:0"
                }
              ]
            },
            "documentation": {
              "id": 373,
              "nodeType": "StructuredDocumentation",
              "src": "7824:181:0",
              "text": "-----------------------------------------------------------------------\n EIP-712 Logic\n -----------------------------------------------------------------------"
            },
            "functionSelector": "f698da25",
            "id": 388,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "domainSeparator",
            "nameLocation": "8020:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8035:2:0"
            },
            "returnParameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 376,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 388,
                  "src": "8067:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8067:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8066:9:0"
            },
            "scope": 428,
            "src": "8011:222:0",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 408,
              "nodeType": "Block",
              "src": "8316:302:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 396,
                            "name": "DOMAIN_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 221,
                            "src": "8408:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 397,
                            "name": "hashedDomainName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 223,
                            "src": "8446:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 398,
                            "name": "hashedDomainVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 225,
                            "src": "8485:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "expression": {
                              "id": 399,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "8527:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 400,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8533:7:0",
                            "memberName": "chainid",
                            "nodeType": "MemberAccess",
                            "src": "8527:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 403,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "8571:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Permit_$428",
                                  "typeString": "contract ERC20Permit"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20Permit_$428",
                                  "typeString": "contract ERC20Permit"
                                }
                              ],
                              "id": 402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8563:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 401,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8563:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8563:13:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 394,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "8375:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "8379:6:0",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "8375:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8375:220:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 393,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "8347:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8347:263:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 392,
                  "id": 407,
                  "nodeType": "Return",
                  "src": "8327:283:0"
                }
              ]
            },
            "id": 409,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_computeDomainSeparator",
            "nameLocation": "8250:23:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 389,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8273:2:0"
            },
            "returnParameters": {
              "id": 392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 391,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 409,
                  "src": "8307:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 390,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8307:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8306:9:0"
            },
            "scope": 428,
            "src": "8241:377:0",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 426,
              "nodeType": "Block",
              "src": "8726:141:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "1901",
                            "id": 419,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8802:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string hex\"1901\""
                            },
                            "value": "\u0019\u0001"
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 420,
                              "name": "domainSeparator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 388,
                              "src": "8814:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8814:17:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 422,
                            "name": "hashStruct",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 411,
                            "src": "8833:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string hex\"1901\""
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 417,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "8785:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "8789:12:0",
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "8785:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 423,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8785:59:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 416,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "8757:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8757:102:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 415,
                  "id": 425,
                  "nodeType": "Return",
                  "src": "8737:122:0"
                }
              ]
            },
            "id": 427,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_computeDigest",
            "nameLocation": "8635:14:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 411,
                  "mutability": "mutable",
                  "name": "hashStruct",
                  "nameLocation": "8668:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 427,
                  "src": "8660:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 410,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8660:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8649:36:0"
            },
            "returnParameters": {
              "id": 415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 414,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 427,
                  "src": "8717:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 413,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8717:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8716:9:0"
            },
            "scope": 428,
            "src": "8626:241:0",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 555,
        "src": "4227:4643:0",
        "usedErrors": [
          241,
          243
        ],
        "usedEvents": [
          11,
          19
        ]
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 430,
              "name": "ERC20Permit",
              "nameLocations": [
                "9026:11:0"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 428,
              "src": "9026:11:0"
            },
            "id": 431,
            "nodeType": "InheritanceSpecifier",
            "src": "9026:11:0"
          }
        ],
        "canonicalName": "EnshroudToken",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 429,
          "nodeType": "StructuredDocumentation",
          "src": "8874:126:0",
          "text": "@notice Enshroud ERC20 token contract\n @dev mintable by isMinter role mapping; not burnable; ERC20Permit implemented"
        },
        "fullyImplemented": true,
        "id": 554,
        "linearizedBaseContracts": [
          554,
          428,
          214
        ],
        "name": "EnshroudToken",
        "nameLocation": "9009:13:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "documentation": {
              "id": 432,
              "nodeType": "StructuredDocumentation",
              "src": "9045:176:0",
              "text": "-----------------------------------------------------------------------\n ERC20 data\n -----------------------------------------------------------------------"
            },
            "functionSelector": "9a2d47e2",
            "id": 435,
            "mutability": "constant",
            "name": "ENSHROUDTOKEN_NAME",
            "nameLocation": "9250:18:0",
            "nodeType": "VariableDeclaration",
            "scope": 554,
            "src": "9227:60:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 433,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "9227:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "456e7368726f756420546f6b656e",
              "id": 434,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9271:16:0",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_47d3be0a5faa8b5a8cafdf2c81a488c264f11bacaae46fcef1129b15f02a989b",
                "typeString": "literal_string \"Enshroud Token\""
              },
              "value": "Enshroud Token"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "226990bd",
            "id": 438,
            "mutability": "constant",
            "name": "ENSHROUDTOKEN_SYMBOL",
            "nameLocation": "9317:20:0",
            "nodeType": "VariableDeclaration",
            "scope": 554,
            "src": "9294:56:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 436,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "9294:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "454e5348524f5544",
              "id": 437,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9340:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_319a6628c767be3aafdc45d3d959bf8f9e02004aa8dafda69f018a7f5d56e474",
                "typeString": "literal_string \"ENSHROUD\""
              },
              "value": "ENSHROUD"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "63ba94b4",
            "id": 441,
            "mutability": "constant",
            "name": "ENSHROUDTOKEN_VERSION",
            "nameLocation": "9380:21:0",
            "nodeType": "VariableDeclaration",
            "scope": 554,
            "src": "9357:50:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 439,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "9357:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "31",
              "id": 440,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9404:3:0",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                "typeString": "literal_string \"1\""
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "642d78fd",
            "id": 444,
            "mutability": "constant",
            "name": "ENSHROUDTOKEN_DECIMALS",
            "nameLocation": "9436:22:0",
            "nodeType": "VariableDeclaration",
            "scope": 554,
            "src": "9414:49:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 442,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "9414:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "3138",
              "id": 443,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9461:2:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18_by_1",
                "typeString": "int_const 18"
              },
              "value": "18"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 448,
            "mutability": "mutable",
            "name": "isMinter",
            "nameLocation": "9505:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 554,
            "src": "9472:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 447,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 445,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9480:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9472:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 446,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "9491:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "documentation": {
              "id": 449,
              "nodeType": "StructuredDocumentation",
              "src": "9522:174:0",
              "text": "-----------------------------------------------------------------------\n Errors\n -----------------------------------------------------------------------"
            },
            "errorSelector": "f8d2906c",
            "id": 451,
            "name": "NotMinter",
            "nameLocation": "9708:9:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9717:2:0"
            },
            "src": "9702:18:0"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 452,
              "nodeType": "StructuredDocumentation",
              "src": "9728:174:0",
              "text": "-----------------------------------------------------------------------\n Events\n -----------------------------------------------------------------------"
            },
            "eventSelector": "d7f05487ae3002c125e5927b52b19827dd903ac7cb2e69c4f7f2fdbc17d1145c",
            "id": 458,
            "name": "MinterStatusUpdated",
            "nameLocation": "9914:19:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 454,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "minter",
                  "nameLocation": "9942:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "9934:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9934:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 456,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "status",
                  "nameLocation": "9955:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "9950:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9950:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9933:29:0"
            },
            "src": "9908:55:0"
          },
          {
            "anonymous": false,
            "eventSelector": "3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273",
            "id": 464,
            "name": "TokensMinted",
            "nameLocation": "9977:12:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 460,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "9998:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 464,
                  "src": "9990:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 459,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9990:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 462,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10017:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 464,
                  "src": "10009:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10009:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9989:35:0"
            },
            "src": "9971:54:0"
          },
          {
            "body": {
              "id": 482,
              "nodeType": "Block",
              "src": "10619:50:0",
              "statements": [
                {
                  "expression": {
                    "id": 480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 476,
                        "name": "isMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "10630:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 478,
                      "indexExpression": {
                        "id": 477,
                        "name": "_initialMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "10639:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10630:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10657:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "10630:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 481,
                  "nodeType": "ExpressionStatement",
                  "src": "10630:31:0"
                }
              ]
            },
            "documentation": {
              "id": 465,
              "nodeType": "StructuredDocumentation",
              "src": "10218:165:0",
              "text": "include initial mint and isMinter status here\n @param _initialMinter: address initially designated as a minter, presumably deployer and/or DAO governance"
            },
            "id": 483,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 470,
                    "name": "ENSHROUDTOKEN_NAME",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 435,
                    "src": "10476:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 471,
                    "name": "ENSHROUDTOKEN_SYMBOL",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 438,
                    "src": "10509:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 472,
                    "name": "ENSHROUDTOKEN_VERSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 441,
                    "src": "10544:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 473,
                    "name": "ENSHROUDTOKEN_DECIMALS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 444,
                    "src": "10580:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 474,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 469,
                  "name": "ERC20Permit",
                  "nameLocations": [
                    "10450:11:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 428,
                  "src": "10450:11:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "10450:163:0"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 467,
                  "mutability": "mutable",
                  "name": "_initialMinter",
                  "nameLocation": "10419:14:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 483,
                  "src": "10411:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 466,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10411:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10400:40:0"
            },
            "returnParameters": {
              "id": 475,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10619:0:0"
            },
            "scope": 554,
            "src": "10389:280:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 510,
              "nodeType": "Block",
              "src": "10941:140:0",
              "statements": [
                {
                  "condition": {
                    "id": 495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "10956:21:0",
                    "subExpression": {
                      "baseExpression": {
                        "id": 491,
                        "name": "isMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "10957:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 494,
                      "indexExpression": {
                        "expression": {
                          "id": 492,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10966:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10970:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10966:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10957:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 499,
                  "nodeType": "IfStatement",
                  "src": "10952:45:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 496,
                        "name": "NotMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "10986:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10986:11:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 498,
                    "nodeType": "RevertStatement",
                    "src": "10979:18:0"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 501,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "11014:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 502,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 488,
                        "src": "11021:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 500,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 213,
                      "src": "11008:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11008:21:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 504,
                  "nodeType": "ExpressionStatement",
                  "src": "11008:21:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 506,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "11058:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 507,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 488,
                        "src": "11065:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 505,
                      "name": "TokensMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 464,
                      "src": "11045:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11045:28:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 509,
                  "nodeType": "EmitStatement",
                  "src": "11040:33:0"
                }
              ]
            },
            "documentation": {
              "id": 484,
              "nodeType": "StructuredDocumentation",
              "src": "10677:203:0",
              "text": "@notice mints '_amount' of Enshroud Token to '_addr'\n @param _addr address that will receive the minted $ENSHROUD tokens\n @param _amount amount of $ENSHROUD tokens that will be minted"
            },
            "functionSelector": "40c10f19",
            "id": 511,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nameLocation": "10895:4:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 486,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nameLocation": "10908:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 511,
                  "src": "10900:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10900:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 488,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "10923:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 511,
                  "src": "10915:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 487,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10915:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10899:32:0"
            },
            "returnParameters": {
              "id": 490,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10941:0:0"
            },
            "scope": 554,
            "src": "10886:195:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 539,
              "nodeType": "Block",
              "src": "11442:181:0",
              "statements": [
                {
                  "condition": {
                    "id": 523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11457:21:0",
                    "subExpression": {
                      "baseExpression": {
                        "id": 519,
                        "name": "isMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "11458:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 522,
                      "indexExpression": {
                        "expression": {
                          "id": 520,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "11467:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11471:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "11467:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11458:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 527,
                  "nodeType": "IfStatement",
                  "src": "11453:45:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 524,
                        "name": "NotMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "11487:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11487:11:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 526,
                    "nodeType": "RevertStatement",
                    "src": "11480:18:0"
                  }
                },
                {
                  "expression": {
                    "id": 532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 528,
                        "name": "isMinter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "11509:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 530,
                      "indexExpression": {
                        "id": 529,
                        "name": "_minterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 514,
                        "src": "11518:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11509:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 531,
                      "name": "_minterStatus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 516,
                      "src": "11536:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11509:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 533,
                  "nodeType": "ExpressionStatement",
                  "src": "11509:40:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 535,
                        "name": "_minterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 514,
                        "src": "11585:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 536,
                        "name": "_minterStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 516,
                        "src": "11601:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 534,
                      "name": "MinterStatusUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 458,
                      "src": "11565:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11565:50:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 538,
                  "nodeType": "EmitStatement",
                  "src": "11560:55:0"
                }
              ]
            },
            "documentation": {
              "id": 512,
              "nodeType": "StructuredDocumentation",
              "src": "11089:241:0",
              "text": "@notice updates if an address is authorized to mint tokens, by an existing minter\n @param _minterAddress address whose minter authorization status will be updated\n @param _minterStatus: updated minter authorization status"
            },
            "functionSelector": "efc8f3c8",
            "id": 540,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateMinterStatus",
            "nameLocation": "11345:18:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 514,
                  "mutability": "mutable",
                  "name": "_minterAddress",
                  "nameLocation": "11382:14:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 540,
                  "src": "11374:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11374:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "mutability": "mutable",
                  "name": "_minterStatus",
                  "nameLocation": "11412:13:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 540,
                  "src": "11407:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11407:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11363:69:0"
            },
            "returnParameters": {
              "id": 518,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11442:0:0"
            },
            "scope": 554,
            "src": "11336:287:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 552,
              "nodeType": "Block",
              "src": "11813:41:0",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 548,
                      "name": "isMinter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 448,
                      "src": "11831:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 550,
                    "indexExpression": {
                      "id": 549,
                      "name": "_addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 543,
                      "src": "11840:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11831:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 547,
                  "id": 551,
                  "nodeType": "Return",
                  "src": "11824:22:0"
                }
              ]
            },
            "documentation": {
              "id": 541,
              "nodeType": "StructuredDocumentation",
              "src": "11631:107:0",
              "text": "@notice returns if an address is authorized to mint tokens\n @param _addr queried minter address"
            },
            "functionSelector": "bbb30c5d",
            "id": 553,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMinterStatus",
            "nameLocation": "11753:15:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 543,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nameLocation": "11777:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "11769:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 542,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11769:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11768:15:0"
            },
            "returnParameters": {
              "id": 547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 546,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "11807:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 545,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11807:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11806:6:0"
            },
            "scope": 554,
            "src": "11744:110:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 555,
        "src": "9000:2857:0",
        "usedErrors": [
          241,
          243,
          451
        ],
        "usedEvents": [
          11,
          19,
          458,
          464
        ]
      }
    ],
    "src": "33:11826:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.28+commit.7893614a.Linux.g++"
  },
  "networks": {
    "1": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0xd7f05487ae3002c125e5927b52b19827dd903ac7cb2e69c4f7f2fdbc17d1145c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "minter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "status",
              "type": "bool"
            }
          ],
          "name": "MinterStatusUpdated",
          "type": "event"
        },
        "0x3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TokensMinted",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xBE819Dc859c2eBe1f15FCad08727355CE1CE8f68",
      "transactionHash": "0x40238cce7efbe0cc64ef7e7d65991a9ba25b4f234e9e24bb89b1b0d6c250160e"
    },
    "1337": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0xd7f05487ae3002c125e5927b52b19827dd903ac7cb2e69c4f7f2fdbc17d1145c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "minter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "status",
              "type": "bool"
            }
          ],
          "name": "MinterStatusUpdated",
          "type": "event"
        },
        "0x3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TokensMinted",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xE1c08596DEb9465184820f2815182157db42757B",
      "transactionHash": "0xd537650b260ac2a8a3bbca4a5b96f908cfdcd3d05261b600b7bff52c21d6f5f8"
    },
    "11155111": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0xd7f05487ae3002c125e5927b52b19827dd903ac7cb2e69c4f7f2fdbc17d1145c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "minter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "status",
              "type": "bool"
            }
          ],
          "name": "MinterStatusUpdated",
          "type": "event"
        },
        "0x3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TokensMinted",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x7bA32A25E01F24b6c4D94783a3C154840268344d",
      "transactionHash": "0xcc810148c3e58f3b933153c46a399c9522daa5a0fbfbffcc0b9d4c21d06709b3"
    }
  },
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-31T22:08:32.923Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "mintable by isMinter role mapping; not burnable; ERC20Permit implemented",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "_initialMinter": ": address initially designated as a minter, presumably deployer and/or DAO governance"
        }
      },
      "getMinterStatus(address)": {
        "params": {
          "_addr": "queried minter address"
        }
      },
      "mint(address,uint256)": {
        "params": {
          "_addr": "address that will receive the minted $ENSHROUD tokens",
          "_amount": "amount of $ENSHROUD tokens that will be minted"
        }
      },
      "updateMinterStatus(address,bool)": {
        "params": {
          "_minterAddress": "address whose minter authorization status will be updated",
          "_minterStatus": ": updated minter authorization status"
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "errors": {
      "NotMinter()": [
        {
          "notice": "----------------------------------------------------------------------- Errors -----------------------------------------------------------------------"
        }
      ],
      "PermitExpired()": [
        {
          "notice": "----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------"
        }
      ]
    },
    "events": {
      "MinterStatusUpdated(address,bool)": {
        "notice": "----------------------------------------------------------------------- Events -----------------------------------------------------------------------"
      },
      "Transfer(address,address,uint256)": {
        "notice": "----------------------------------------------------------------------- Events -----------------------------------------------------------------------"
      }
    },
    "kind": "user",
    "methods": {
      "ENSHROUDTOKEN_NAME()": {
        "notice": "----------------------------------------------------------------------- ERC20 data -----------------------------------------------------------------------"
      },
      "approve(address,uint256)": {
        "notice": "----------------------------------------------------------------------- ERC20 Logic -----------------------------------------------------------------------"
      },
      "constructor": {
        "notice": "include initial mint and isMinter status here"
      },
      "domainSeparator()": {
        "notice": "----------------------------------------------------------------------- EIP-712 Logic -----------------------------------------------------------------------"
      },
      "getMinterStatus(address)": {
        "notice": "returns if an address is authorized to mint tokens"
      },
      "mint(address,uint256)": {
        "notice": "mints '_amount' of Enshroud Token to '_addr'"
      },
      "name()": {
        "notice": "----------------------------------------------------------------------- Metadata Storage -----------------------------------------------------------------------"
      },
      "nonces(address)": {
        "notice": "----------------------------------------------------------------------- EIP-2612 Storage -----------------------------------------------------------------------"
      },
      "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
        "notice": "----------------------------------------------------------------------- EIP-2612 Logic -----------------------------------------------------------------------"
      },
      "totalSupply()": {
        "notice": "----------------------------------------------------------------------- ERC20 Storage -----------------------------------------------------------------------"
      },
      "updateMinterStatus(address,bool)": {
        "notice": "updates if an address is authorized to mint tokens, by an existing minter"
      }
    },
    "notice": "Enshroud ERC20 token contract",
    "version": 1
  }
}